【发布时间】:2011-03-15 18:48:00
【问题描述】:
我的任务在 JMS 主题上有一个持久订阅者,我需要能够将此任务从一个主机移动到另一个主机。
任务已使用以下方式设置其客户端 ID:
TopicConnection.setClientID("MyClient");
和:
TopicSession.createDurableSubscriber(主题, “耐用”);
对于TopicConnection、TopicSession和Topic的相关实例。我正在使用客户端确认,并且每条消息都会在成功处理后得到确认(我在下面发布的示例运行中没有错误)。
任务将始终具有相同的客户端 ID(“MyClient”和“durable”的组合)。
但是,对于每个主机来说,这个相同的客户端 ID 似乎被视为单独的。
所以我得到以下场景:
- 主机 A 正在运行订阅服务器。
- 已发送消息 1-10。
- 主机 A 收到消息 1-10 并关闭其订阅者(关闭连接)
- 已发送消息 11-20。
- 主机 B 使用(显然)相同的客户端 ID 设置订阅者
- 已发送消息 21-30。
- 主机 B 收到消息 11-30(通常是之前的一些消息,似乎是随机的)
- 主机 B 关闭其订阅者
- 主机 A 再次设置它的订阅者
- 主机 A 收到消息 11-30
我认为主机身份以某种方式被合并到后台的客户端 ID 中是否正确?有没有办法阻止这种情况发生。
我正在使用 SwiftMQ,以防这是该解决方案特有的行为。
【问题讨论】:
-
我应该指出主机 B 上的路由器在步骤 1-4 中没有运行。