删除队列不重新定义,消费者停止处理消息



我想解决以下问题:

  1. 我有2个SimpleMessageListenerContainer定义在java conf.
  2. 他们每个人都有自己的监听器包装适配器,他们都使用相同的CachingConnectionFactory(它是好的吗?)。此外,它们每个处理不同的队列(具有常量名称)
  3. 我正在测试场景时,无论出于何种原因,一个队列被删除。
  4. 当我从web管理控制台手动删除它时,容器试图重新定义此队列并失败(所有重试失败)。异常不能真正说明故障的原因。
  5. 最终,这个队列的所有消费者线程都被"重新启动",但是它们不会再消费任何消息。即使其他人会重新定义这个队列(例如:生产者)

所以有几个问题:

  1. 我可以修复队列的重新定义,或者检查为什么重新定义失败?刚开始时,队列的定义是有效的。这就引出了下一个问题
  2. 可能是我可以让心跳发送者使用守护线程?它阻止jvm退出,所以重启不会发生。这不会解决问题,但是新的jvm进程成功地重新定义了队列。重新启动将由主管引起。

同时,当所有消费者(在第一个容器下)删除队列并不真正工作时,我希望jvm会退出,但是可能因为我有第二个容器是ok的(所有消费者都活着并且队列存在),jvm继续生存(可能是当第二个容器将关闭心跳发送者也将停止?)

如有任何建议,我们将不胜感激。如果需要,我将发布java配置的代码片段。

我们只是通过在侦听器容器中添加missing-queues-fatal属性来"修复"这个问题。

查看拉取请求。

我们不能在点版本中修改模式,所以有几种方法可以在1.3.x中配置它;它已在1.4中添加到模式中。x,并将在<rabbit:listener-container/>中提供;你可以看到1.4。x Pull Request here.

1.3.5应该可以在本周晚些时候,或下一个,但你可以尝试1.3.5.BUILD-SNAPSHOT现在如果你想。

当它被设置为false(默认为true)时,容器将使用recovery-interval进入恢复模式。

1.3.5。

最新更新