繁体   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