[英]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.