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

Joh*_*ort 8 java spring amqp rabbitmq

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

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

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

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

Der*_*ley 0

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

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

  • 感谢您的回复,但我认为我们正在谈论两件不同的事情。我的问题是关于出版商致谢(我对其进行了编辑以使这一点更加明显) (3认同)