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



我正在通过Spring AMQP使用RabbitMQ进行Spring Boot项目。我们希望能够在消息发布为 NACK 时测试应用的行为(特别是当PublisherConfirmCallback#confirmack参数false时(。但是,我们很难尝试在集成测试中设置此方案(即,在应用运行的情况下,而不是单元测试(。

需要明确的是,我们正在围绕发布商确认进行测试,而不是消费者确认。

我们知道您可以使用 RabbitTemplate 的 execute 方法访问通道,但是我们的 RabbitMQ 会自动确认,因此在执行通道回调时消息已经消失。我们认为我们也许可以在运行时禁用自动确认(以免中断测试套件(,或者简单地阻止通道并在测试中手动接收消息,但我们无法弄清楚如何做到这一点。但实际上,在测试期间引起 NACK 的任何方法都会很棒。

TL;DR 如何从客户端代码中获取消息

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

首先,您必须关闭自动确认。 打开此功能后,将无法接收消息。

之后,您的测试设置应包括一个消息使用者,该消息使用者专门编码为在需要时执行所需的操作...不要使用您的真实代码来测试 nack 处理。设置一个只做喋喋不休的消费者...或者知道何时收到某些消息的人,它应该

最新更新