TIbco EMS客户端容错

时间:2014-05-21 10:59:44

标签: distributed-computing fault-tolerance tibco-ems

我知道Tibco EMS在服务器端的热备份配置中提供了Fault Tolerance,详见the User's Guidethis answerhere

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

3 个答案:

答案 0 :(得分:0)

EMS(或JMS)不支持客户端容错功能。原因很简单:通常,发布商流程彼此不了解。

详细说明:

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

您的解决方案:

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

我认为你有充分的理由(比如来自server1和server2的消息是多余的)。在这种情况下,你必须在你的"活跃"之间进行某种沟通。和"被动"服务器

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

可能性2:Server2本身已订阅该主题,可以判断消息何时停止。

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

答案 1 :(得分:0)

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

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

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

答案 2 :(得分: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