错误通道
从 1.3 版本开始,binder 会无条件地将异常发送到每个消费者目的地的错误通道,并且还可以配置为将异步生产者发送失败的情况发送到错误通道。更多信息请参阅“错误处理”。
RabbitMQ 有两种发送失败类型:
-
返回的消息,
-
被否定确认的 发布者确认。
后者较为罕见。根据RabbitMQ文档所述,“[一个nack]仅当负责队列的Erlang进程内部发生错误时才会被传递”。此外,如果您向设置了reject-publish队列溢出行为的有界队列发布消息,也可能收到否定确认。
除了启用生产者错误通道(如“错误处理”中所述),RabbitMQ绑定器仅在连接工厂经过适当配置时才会向通道发送消息,配置如下:
-
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: 消息发布时使用的路由键。
另请参阅发布者确认,了解接收返回消息的替代机制。
对于被负面确认的确认消息,其负载是一个 NackedAmqpMessageException,具有以下属性:
-
failedMessage: 发送失败的 spring-messagingMessage<?>。 -
nackReason: 失败原因(如果可用——您可能需要检查代理日志以获取更多信息)。
这些异常不会自动处理(例如发送到死信队列)。你可以通过自己的 Spring Integration 流来消费这些异常。