您需要做的是告诉rabbitmq,消息被拒绝而不是被确认。默认情况下,通讯器将在
AmqpReceiver
. 如您所见,如果抛出实现
RejectMessageExceptionInterface
在处理程序内部,消息将自动被拒绝。
您还可以使用定制中间件“模拟”这种行为。我在一个小的演示应用程序中创建了类似的东西。该机制由一个中间件组成,该中间件将(序列化)原始消息包装在新的
RetryMessage
并通过自定义消息总线将其发送到另一个队列,用作死信交换。然后,该消息的处理程序将解包retrymessage(获取原始消息并对其进行反序列化),并通过默认总线进行传输:
见:
这是一个基本设置,它拒绝消息并允许您立即再次使用它!!)。您可能希望在延迟消耗以改进这一点时添加额外信息,例如时间戳的标题。为此,您应该考虑编写自己的接收器、中间件和/或处理程序。