TIbco EMS客户端容错

问题描述 投票:0回答:3

[我知道Tibco EMS在服务器端的热备份配置中提供了容错功能,如the User's Guidethis answerhere中所述。

但是在客户端,Tibco EMS是否为容错客户端提供了开箱即用的解决方案?一个示例:在主题Sports.F1.PitStop上,两个客户端(server1,server2)注册为发布者。这样的想法是,如果server1上出现问题(即server1上的发布者出现故障),server2将无缝地继续在该主题上发布。所以问题是,Tibco EMS是否提供了这样的客户端容错能力?

distributed-computing fault-tolerance tibco-ems
3个回答
0
投票

编号

EMS(或JMS)不支持客户端容错功能。原因很简单:通常,发布者进程彼此不认识。

详细说明:

主题通常会接受许多发布者(超过两个)。在发布/订阅方案中,发布者不认识订阅者,并且在某种程度上他们通常不认识其他发布者。

您的解决方案:

关于您的解决方案的我的第一个问题:为什么两个服务器都不能同时发布消息?

我假设您有充分的理由(例如来自server1和server2的消息是多余的)。在这种情况下,那么您将必须在“主动”和“被动”服务器之间进行某种通信。

可能性1:Server2连接到简单的服务/ rmi /其他心跳机制,并且可以判断Server1是否/何时停止发布。

可能性2:Server2本身已订阅该主题,并且可以确定消息何时停止。

最后一个注释:如果您的意思是shared "subscriptions"(例如,两个服务器之间共享一个持久预订):新的JMS 2.0 API支持此功能。 EMS 8是唯一支持JMS 2.0的EMS版本。


0
投票

我不确定我是否完全理解你的问题。 EMS是消息代理。它代理消息。就是这样。如果您有多个服务器发布同一主题,那么这对于EMS来说很好。如果您的发布者本身处于故障转移配置中,因此只有一个正在主动发送,而另一个在第一个发生故障时接管,则EMS不在乎。

管理从一个发布者到另一个发布者的故障转移机制,这是您必须自己开发的。 EMS没有提供任何支持。您需要某种机制让server2知道server1何时关闭。有几种方法可以做到这一点:

  • [使用心跳机制,其中主动服务器发送定期的心跳消息(也可能跨EMS),而被动服务器侦听它们,并且当它们停止时,假定server1处于关闭状态。
  • 使用server1和server2之间的活动打开连接(例如,打开一个简单的tcp端口,并通过定期发送虚拟消息来阻止它自动关闭),并在该端口上进行打开读取。当server1发生故障时,您将收到连接错误,而不必等待心跳超时。
  • 使用第三方监视工具,例如openview,tivoli或nagios,检测到server1已关闭并通知server2。
  • 您可以使用EMS上的一项功能。 EMS具有您可以订阅的系统管理主题,并且该日志基本上记录了内部发生的所有事件。您可以订阅连接和断开连接事件,以监视与EMS连接或断开连接的任何组件。如果server1失败,这将显示为断开事件。

0
投票

心跳机制:

https://support.tibco.com/s/article/Tibco-KnowledgeArticle-Article-33918

例如:

client_heartbeat_server=10
client_timeout_server_connection=35
server_heartbeat_client=10
server_timeout_client_connection=35
© www.soinside.com 2019 - 2024. All rights reserved.