如何强制RabbitMQ代理NACK消息进行测试?

时间:2016-02-08 20:39:14

标签: java spring rabbitmq amqp

我正在通过Spring AMQP使用RabbitMQ开发Spring Boot项目。我们希望能够在消息发布为NACK时测试我们应用的行为(特别是当ack PublisherConfirmCallback#confirm false参数为execute时)。但是,我们很难在集成测试中尝试设置此场景(即,应用程序在运行,而不是单元测试)。

为了清楚起见,我们正在测试发布者的确认,而不是消费者的确认。

我们知道您可以使用RabbitTemplate的--tag方法访问某个频道,但我们的RabbitMQ自动确认,因此在执行频道回调时消息已经消失。我们认为我们可以在运行时禁用auto-ack(以免中断测试套件)或者只是阻止通道并在测试中手动接收它,但是我们无法弄清楚怎么做其中任何一个。但实际上,在测试过程中任何导致NACK的方法都会很棒。

tl; dr如何从客户端代码中取消消息

2 个答案:

答案 0 :(得分:0)

你必须先关闭auto-ack。打开它后,就无法收到消息。

之后,您的测试设置应该包含一个消息使用者,该消费者专门编写为您想要的,当您想要时...不要使用您的真实代码来测试nack处理。设置一个只做一个nack的消费者......或者知道什么时候收到某些消息的消费者,它应该nack

答案 1 :(得分:0)

将消息发布到不存在的交换将导致发布者确认回调以接收nack!