Joh*_*ort 8 java spring amqp rabbitmq
我正在通过 Spring AMQP 使用 RabbitMQ 进行 Spring Boot 项目。我们希望能够在消息发布为 NACK 时测试我们的应用程序的行为(特别是当 的ack
参数PublisherConfirmCallback#confirm
为 时false
)。然而,我们很难在集成测试中设置这个场景(也就是说,运行应用程序,而不是单元测试)。
需要明确的是,我们正在围绕发布商确认而不是消费者确认进行测试。
我们知道您可以使用 RabbitTemplate 的execute
方法访问通道,但是我们的 RabbitMQ 会自动确认,因此在执行通道回调时消息已经消失了。我们认为我们可以在运行时禁用自动确认(以免中断测试套件)或简单地阻塞通道并在测试中手动接收消息,但我们无法弄清楚如何做到这些。但实际上,任何在测试期间导致 NACK 的方法都会很棒。
tl;dr 如何从客户端代码获取消息
首先,您必须关闭自动确认。打开该功能后,将无法取消消息。
之后,您的测试设置应该包括一个消息使用者,该消息使用者专门编码为在您想要的时候执行您想要的操作...不要使用真实的代码来测试 nack 处理。设置一个只执行 nack 的消费者...或者一个知道何时收到某些消息的消费者,它应该 nack