Error Channels

从 1.3 版本开始,binder 无条件地将异常发送给每个消费者目的地的错误频道,也可以配置为将 Async producer 发送失败发送到错误频道。有关更多信息,请参见 “Error Handling”。

RabbitMQ 有两种发送失败类型:

后者很少见。根据 RabbitMQ 文档,“[Nack] 仅在队列负责的 Erlang 进程中发生内部错误时才传递”。如果发布到具有 `reject-publish`队列溢出行为的有界队列,您也可以得到否定确认。

除了启用生产者错误通道(如 “Error Handling” 所述),RabbitMQ binder 仅在连接工厂适当配置时才将消息发送到频道,如下所示:

  • ccf.setPublisherConfirms(true);

  • ccf.setPublisherReturns(true);

对连接工厂使用 Spring Boot 配置时,设置以下属性:

  • spring.rabbitmq.publisher-confirms

  • spring.rabbitmq.publisher-returns

返回的消息的 ErrorMessage 有效负载是一个具有以下属性的 ReturnedAmqpMessageException

  • failedMessage:发送失败的 spring-messaging Message<?>

  • amqpMessage:原始 spring-amqp Message

  • replyCode:指示失败原因(例如,312 - 无路由)的整数值。

  • replyText:指示失败原因(例如,NO_ROUTE)的文本值。

  • exchange:发布消息到的交换。

  • routingKey:发布消息时使用的路由键。

另请参见 Publisher Confirms 以了解接收返回消息的替代机制。

对于负确认确认,有效负载是一个具有以下属性的 NackedAmqpMessageException

  • failedMessage:发送失败的 spring-messaging Message<?>

  • nackReason:原因(如果可用 — 您可能需要检查代理日志以获取更多信息)。

没有自动处理这些异常(例如发送到 dead-letter queue)。您可以使用自己的 Spring 集成流来处理这些异常。