【发布时间】:2014-12-18 14:59:23
【问题描述】:
我们的项目需要监听不同机器上托管的队列。例如,我们有 4 个虚拟主机。我为每个主机创建了 SimpleMessageListenerContainer 的新实例,但我使用了一个 MessageListener 实例(它实现了 ChannelAwareListener 以便我可以手动确认)。 MessageListener 是一个由 spring 管理的 bean。创建容器时,我维护主机和容器实例的映射。收到消息后,检查我是否从主机收到了所需的消息,从地图中获取容器实例(使用@Resource)并停止监听主机。还要手动确认消息并将消息存储在 cassandra 数据库中。
现在,有时有些消息没有保存在数据库中而丢失了。我认为这可能是一种竞争条件,或者是因为我只使用了一个 messagelistener 实例,但我必须这样做才能获得地图(@Resource)。对不起,如果我没有任何意义。我第一次使用 AMQP 并试图理解它。任何建议都会很棒。谢谢!
【问题讨论】:
标签: spring-amqp