需要帮助AMQP

时间:2014-12-18 14:59:24

标签: spring-amqp

我们要求我们的项目监听托管在不同机器上的队列。例如,我们有4个虚拟主机。我为每个主机创建了SimpleMessageListenerContainer的新实例,但我使用了一个MessageListener实例(它实现了ChannelAwareListener,以便我可以手动确认)。 MessageListener是由spring管理的bean。我在创建容器时维护主机和容器实例的映射。收到消息后,检查我是否从主机收到了所需的消息,从地图中获取容器实例(使用@Resource)并停止收听主机。还要手动确认并将消息存储在cassandra数据库中。

现在,有些时候某些消息不会在数据库中持久存在而丢失。我认为它可能是一个竞争条件或由于我只使用一个messagelistener实例,但我必须这样做,以便我可以得到地图(@Resource)。对不起,如果我没有任何意义。我是第一次使用AMQP并尝试理解它。任何建议都会很棒。谢谢!

1 个答案:

答案 0 :(得分:0)

为什么需要手动确认?让容器照顾好(AUTO)通常会更好。如果侦听器抛出异常,它将在成功时触发消息并解除它。

相关问题