我正在尝试找到有关在订户失败的情况下如何通知EMS发布者的答案。
在Publisher-> EMS服务器-> Subscriber的情况下,如果Subscriber失败,则需要通知Publisher采取纠正措施。在交易系统中,如果我将市场订单发送给订阅者,订阅者又将其发送到交易所,如果失败,则需要使发布者将有关其他主题的消息发布到另一个Sunscriber(另一个交易所)。
任何想法表示赞赏。
最佳答案
tibjmsadmin.jar库包含用于检测订户何时断开连接的方法。比编写代码更容易,您可以:
如果您有Hawk,请使用
tibjmsadmin.hma编写Hawk规则
如果订户
断开连接,或
在监视器上听
话题
$ sys.monitor.connection.disconnect-
邮件正文告诉您
哪个订户已断开连接。
但是,这些用于故障转移发布者的“监视”方法存在一个严重的问题-在您检测到订阅者故障并重定向发布者所需的时间中,某些消息可能会通过并卡在已失效的队列中。您不会轻易在任何1000万美元的交易中发生这种情况!
EMS知道订户何时连接,您应该利用此优势。
使用“分布式队列”,并且不需要在应用程序中编写逻辑代码以在新订户失败时切换到新订户。这不会丢失消息,并且可以保持消息顺序。将负载平衡和故障转移逻辑保持在代码之外以及JMS提供程序的管理设置中也是一种良好的体系结构实践。
基本上,您将多个订户设置到一个队列(每个交换由一个订户代表)。 EMS的默认操作是以循环方式在所有订户之间平衡消息的负载。但是您可以将队列设置为“独占”,以便一次只能将消息发送给一个订户。然后,如果该活动订户失败,则消息将转发到另一个订户。
有关所有这些主题的更多详细信息,请参见EMS手册。