Error Channels
从 1.3 版本开始,binder 无条件地将异常发送给每个消费者目的地的错误频道,也可以配置为将 Async producer 发送失败发送到错误频道。有关更多信息,请参见 “Error Handling”。
RabbitMQ 有两种发送失败类型:
-
Returned messages,
-
Negatively acknowledged Publisher Confirms.
后者很少见。根据 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-messagingMessage<?>
。 -
amqpMessage
:原始 spring-amqpMessage
。 -
replyCode
:指示失败原因(例如,312 - 无路由)的整数值。 -
replyText
:指示失败原因(例如,NO_ROUTE
)的文本值。 -
exchange
:发布消息到的交换。 -
routingKey
:发布消息时使用的路由键。
另请参见 Publisher Confirms 以了解接收返回消息的替代机制。
对于负确认确认,有效负载是一个具有以下属性的 NackedAmqpMessageException
:
-
failedMessage
:发送失败的 spring-messagingMessage<?>
。 -
nackReason
:原因(如果可用 — 您可能需要检查代理日志以获取更多信息)。
没有自动处理这些异常(例如发送到 dead-letter queue)。您可以使用自己的 Spring 集成流来处理这些异常。