跳到主要内容
版本:5.0.1

错误通道

DeepSeek V3 中英对照 Error Channels

从 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-messaging Message<?>。

  • amqpMessage: 原始的 spring-amqp Message。

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

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

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

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

另请参阅发布者确认,了解接收返回消息的替代机制。

对于被负面确认的确认消息,其负载是一个 NackedAmqpMessageException,具有以下属性:

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

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

这些异常不会自动处理(例如发送到死信队列)。你可以通过自己的 Spring Integration 流来消费这些异常。