簡體   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