错误通道
从 1.3 版本开始,绑定器会无条件地将每个消费者目标的异常发送到错误通道,并且还可以配置为将异步生产者发送失败发送到错误通道。
有关更多信息,请参阅“错误处理
”。
RabbitMQ 有两种类型的发送失败:
-
返回的消息,
-
否定确认的 发布者确认。
后者很少见。
根据 RabbitMQ 文档,“[否定确认]只会在负责队列的 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 流来消费这些异常。