[英]How to 'check' before picking off the Amqp/ RabbitMQ Queue (Spring AMQP)
[英]RabbitMQ/Spring AMQP - Leave message in a queue
我創建了一個 SpringBoot/Spring AMQP 項目,在其中我在 RabbitMQ 隊列上配置了一個偵聽器。 問題:有什么方法可以將消息留在隊列中? 讓我解釋一下:我使用消息並做一些事情(例如保存在數據庫上),如果出現問題,我希望能夠重新使用消息。
提前致謝
您需要考慮使用事務配置您的偵聽器容器,因此當 DB 調用失敗時,事務將回滾,並且不會在 RabbitMQ 上確認 AMQP 消息。
有關更多信息,請參閱文檔: https://docs.spring.io/spring-amqp/docs/current/reference/html/#transactions
我不知道完成此操作的“Spring”方式,但您所描述的是 AMQP 消費者不會自動確認的正常行為。
從文檔中:
在自動確認模式下,消息在發送后立即被視為成功傳遞。
當您關閉自動確認時,您的消費者必須明確地確認消息,否則它不會出隊(或者如您所說,它將被留在“隊列中”)。 然后,當您確定您的操作成功(並且可能與您的數據庫事務協調)時,您只需在操作結束時簡單地確認消息。
總是有先做什么的問題; 先確認還是先提交數據庫事務? 在不增加復雜性的情況下,您必須根據對您來說問題較少的故障模式來選擇最好的,即您寧願容忍重復消息還是丟失消息?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.