簡體   English   中英

Spring Boot 2.0 服務:從 Rabbit mq 傳遞的消息但未到達 java 代碼

[英]Spring boot 2.0 service : messages delivered from Rabbit mq but not reaching java code

我們正在使用構建在 spring boot 2.0 之上並使用 spring 集成框架的高性能兔子 mq 消費者。 預取計數設置為 150 並且並發消費者數為 4 。 一切都很好,直到有一天,某些消息在 rmq 中仍未得到確認。 當我們重新啟動我們的 Java 服務時,未確認的消息會得到處理,但問題會在一段時間后再次出現。 任何人都可以幫助解決這個奇怪的問題。 現在我們已經設置了一個 cron 作業來在 1 小時后重新啟動服務,以便沒有消息保持未確認狀態。

PS spring boot 版本 2.0 兔子 mq 版本:3.7.7

編輯

該問題已在另一項服務中返回。 我們已將 spring boot 服務升級到2.1版本和最新的 spring-amqp 版本。 消息在未確認狀態下不斷增加,服務中沒有日志。 我正在附加我們服務的線程轉儲

線程轉儲 : https://fastthread.io/my-thread-report.jsp?p=c2hhcmVkLzIwMTkvMTIvMTcvLS1hcGktZjA3MmQ1NDUtZDRlYy00ZGQxLThkZjktN2M2YzAyYjM0ZTMxUyDyThM0ZTMxUyDyThM0ZTMxUyDyKtmZmRjMtChMtCvLtcvLS1hcGktZjA3MmQ1NDUtZDRlYy00ZGQxLThk

PS 在分析一些消息時我認為問題出在 spring 集成渠道中。 我在我們的服務中啟用了調試日志,並發現了一個引起我注意的特定日志:

2019-12-17 ; 07:33:35.111 ;  WARN ; 1 --- [       Thread-3] ; o.s.a.r.l.SimpleMessageListenerContainer ;  ; Closing channel for unresponsive consumer: Consumer@7bc9e6ab: tags=[[]], channel=Cached Rabbit Channel: null, conn: Proxy@40620d8e Shared Rabbit Connection: SimpleConnection@4c060c8f [delegate=amqp://kaarmaapp@10.0.12.209:5672/, localPort= 45896], acknowledgeMode=AUTO local queue size=0

有人可以對此有所了解嗎

通常有兩個可能的原因 - 偵聽器線程“卡住”在用戶代碼中(這是大多數情況下的問題)或 rabbitmq 客戶端庫具有autoRecoveryEnabled=true 通常,Spring AMQP 將其設置為 false,但在某些情況下可以將其設置為 true,並且在某些極端情況下,消費者會“懸空”。 Spring AMQP 不需要它,因為它有自己的連接恢復機制。

對於第一種情況,進行線程轉儲以查看線程在做什么。

對於第二種情況,升級到最新的 spring amqp(2.0.8 - boot 2.0.6)或 2.1.0(將是 boot 2.1 中的版本)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM