[英]How do I use convertAndSendToUser() with an external broker such as RabbitMQ in Spring4?
[英]How can I force a RabbitMQ broker to NACK a message for testing?
我正在通過Spring AMQP使用RabbitMQ開發Spring Boot項目。 當消息發布為NACK時(特別是當PublisherConfirmCallback#confirm
的ack
參數為false
),我們希望能夠測試應用程序的行為。 但是,我們很難嘗試在集成測試中設置此場景(即,應用程序正在運行,而不是單元測試)。
為了清楚起見,我們正在測試發布者的確認,而不是消費者的認可。
我們知道您可以使用RabbitTemplate的execute
方法訪問通道,但是我們的RabbitMQ自動execute
,因此在執行通道回調時消息已經消失。 我們認為我們可以在運行時禁用auto-ack(以免中斷測試套件)或者只是阻止通道並在測試中手動接收它,但是我們無法弄清楚怎么做其中任何一個。 但實際上,在測試過程中任何導致NACK的方法都會很棒。
tl; dr如何從客戶端代碼中取消消息
你將不得不關閉自動確認,開始。 打開它后,就無法收到消息。
在那之后,你的測試設置應該包括一個消息使用者,它被專門編寫為你想要的,當你想要的時候......不要使用真實的代碼來測試nack處理。 設置一個只做一個nack的消費者......或者知道什么時候收到某些消息的消費者,它應該是nack
將消息發布到不存在的交換將導致發布者確認回調以接收nack!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.