簡體   English   中英

如何強制RabbitMQ代理NACK消息進行測試?

[英]How can I force a RabbitMQ broker to NACK a message for testing?

我正在通過Spring AMQP使用RabbitMQ開發Spring Boot項目。 當消息發布為NACK時(特別是當PublisherConfirmCallback#confirmack參數為false ),我們希望能夠測試應用程序的行為。 但是,我們很難嘗試在集成測試中設置此場景(即,應用程序正在運行,而不是單元測試)。

為了清楚起見,我們正在測試發布者的確認,而不是消費者的認可。

我們知道您可以使用RabbitTemplate的execute方法訪問通道,但是我們的RabbitMQ自動execute ,因此在執行通道回調時消息已經消失。 我們認為我們可以在運行時禁用auto-ack(以免中斷測試套件)或者只是阻止通道並在測試中手動接收它,但是我們無法弄清楚怎么做其中任何一個。 但實際上,在測試過程中任何導致NACK的方法都會很棒。

tl; dr如何從客戶端代碼中取消消息

你將不得不關閉自動確認,開始。 打開它后,就無法收到消息。

在那之后,你的測試設置應該包括一個消息使用者,它被專門編寫為你想要的,當你想要的時候......不要使用真實的代碼來測試nack處理。 設置一個只做一個nack的消費者......或者知道什么時候收到某些消息的消費者,它應該是nack

將消息發布到不存在的交換將導致發布者確認回調以接收nack!

暫無
暫無

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

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