繁体   English   中英

RabbitMQ集群重启时的Spring Integration问题

[英]Spring Integration issue on RabbitMQ cluster restart

我们的系统中有几个RabbitMQ队列,我们​​使用Spring Integration amqp:inbound-channel-adapter来消耗消息。 Spring应用程序在5个JBoss节点上运行(不在集群中)

RabbitMQ端是两个带有负载均衡器的集群节点,具有持久队列,在应用程序端,侦听器的定义非常简单,连接工厂的定义如下:

<rabbit:connection-factory id="amqpConnectionFactory" username="${orts.rabbitmq.username}" password="${orts.rabbitmq.password}"
host="${orts.rabbitmq.endpoint}" />

以及几个定义如下的inbound-channel-adapter:

<amqp:inbound-channel-adapter id="artiqAmqpInboundChannelAdapter"
  channel="artiq.queued.action.filter.outbound.channel" error-channel="artiq.recovery.router.channel"
connection-factory="amqpConnectionFactory" header-mapper="amqpHeaderMapper"
  queue-names="ortsArtiqQueue" />

当由于某种原因(例如,部署新配置)而不得不重新启动RabbitMQ集群时,我们遇到了意外的行为。重新启动后,碰巧一个或多个侦听器停止使用消息,并且我们必须重新启动JBoss节点以进行恢复。

请注意,每次受影响的队列可能不同时,此行为并不绑定到特定的队列。 另请注意,部署的新配置不会修改任何现有队列(例如,当我们添加新队列时发生)

侦听器停止使用消息,我们必须重新启动JBoss节点以进行恢复。

以我的经验,这些问题总是会出现,因为侦听器容器线程被“塞住”了适配器下游的某些代码。

要进行调试,下一次它会发生一个线程转储(例如,使用jstack ),并查看使用者线程在做什么。

听起来这不是您的问题,但是最近我们确实修复了一个错误该错误在向现有侦听器容器添加队列或从现有侦听器容器中删除队列时引起了类似的问题。 如果您不这样做,那么该修补程序将无济于事。 您需要查看线程转储以了解发生了什么。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM