我现在已经在这个问题上工作了很多时间,但似乎找不到任何最终解决方案。我有一个消息制作者,应该作为广播员,发布关于两个不同主题的消息。发布者的发布过程遵循以下流程:
- 创建与工厂的连接并启动它。
- 创建会话
- 使用会话和给定主题名称创建消息生产者
- 发送 n* 条消息
- 等待 n 秒
- 关闭生产者、会话、连接
然后我有 3 个消费者使用以下配置订阅了这些主题(每个消费者都有自己的clientId
和durableSubscriptionName
):
<route id="consumerOneRoute">
<from uri="activemq:topic:topicName?clientId=consumerOneId&durableSubscriptionName=ConsumerOneName" />
<bean ref="consumerBean" method="processMessage" />
</route>
事实是我的消费者并不总是收到消息,至少不是全部。有时两个消费者得到所有消息而第三个没有得到任何消息,有时随机消费者收到随机数量的消息等等......我注意到的另一个事实是,如果我停止代理并重新启动它,消费者将收到丢失的消息,我真的不明白为什么在代理的第一个生命周期内不会发生这种情况。有人会这么好心并试图帮助我吗?
谢谢,乔治。
PS:我正在考虑使用虚拟主题,因为我的主要目的是拥有一个广播制作人,它将允许其他消费者在未来附加我不希望每次都通过添加另一个虚拟分支来修改制作人到主要话题。