我正在通过Spring AMQP使用RabbitMQ开发Spring Boot项目。我们希望能够在消息发布为NACK时测试我们应用的行为(特别是当ack
PublisherConfirmCallback#confirm
false
参数为execute
时)。但是,我们很难在集成测试中尝试设置此场景(即,应用程序在运行,而不是单元测试)。
为了清楚起见,我们正在测试发布者的确认,而不是消费者的确认。
我们知道您可以使用RabbitTemplate的--tag
方法访问某个频道,但我们的RabbitMQ自动确认,因此在执行频道回调时消息已经消失。我们认为我们可以在运行时禁用auto-ack(以免中断测试套件)或者只是阻止通道并在测试中手动接收它,但是我们无法弄清楚怎么做其中任何一个。但实际上,在测试过程中任何导致NACK的方法都会很棒。
tl; dr如何从客户端代码中取消消息
答案 0 :(得分:0)
你必须先关闭auto-ack。打开它后,就无法收到消息。
之后,您的测试设置应该包含一个消息使用者,该消费者专门编写为您想要的,当您想要时...不要使用您的真实代码来测试nack处理。设置一个只做一个nack的消费者......或者知道什么时候收到某些消息的消费者,它应该nack
答案 1 :(得分:0)
将消息发布到不存在的交换将导致发布者确认回调以接收nack!