我知道Tibco EMS在服务器端的热备份配置中提供了Fault Tolerance,详见the User's Guide,this answer和here。
但在客户端,Tibco EMS是否为容错客户提供了现成的解决方案?
示例:在主题Sports.F1.PitStop
上,两个客户端(server1,server2)注册为发布者。想法是,如果在server1上出现问题(即server1上的发布者关闭),server2将无缝地继续发布该主题。所以问题是,Tibco EMS是否提供这种客户端容错能力?
答案 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何时关闭。有几种方法可以做到这一点:
答案 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