错误通道

从 1.3 版本开始,绑定器无条件地将异常发送到每个消费者目标的错误通道,并且还可以配置为将异步生产者发送失败发送到错误通道。有关更多信息,请参阅“错误处理”。

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 流来消费这些异常。