从版本 1.3 开始,活页夹无条件地将异常发送到每个使用者目标的错误通道,也可以配置为将异步生产者发送失败发送到错误通道。 有关详细信息,请参阅“错误处理”。

RabbitMQ 有两种类型的发送失败:

  • 返回的消息,

  • 负面确认 发布者确认

后者很少见。 根据 RabbitMQ 文档,“只有当负责队列的 Erlang 进程发生内部错误时,才会交付”[nack]。 如果发布到具有队列溢出行为的有界队列,则还可以获得否定确认。reject-publish

除了启用生产者错误通道(如“错误处理”中所述)之外,RabbitMQ 绑定器仅在正确配置了连接工厂时才向通道发送消息,如下所示:

  • ccf.setPublisherConfirms(true);

  • ccf.setPublisherReturns(true);

对连接工厂使用 Spring Boot 配置时,请设置以下属性:

  • spring.rabbitmq.publisher-confirms

  • spring.rabbitmq.publisher-returns

返回消息的有效负载是具有以下属性的:ErrorMessageReturnedAmqpMessageException

  • failedMessage:发送失败的春季消息。Message<?>

  • amqpMessage:原始 spring-amqp 。Message

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

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

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

  • routingKey:发布邮件时使用的路由键。

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

对于否定确认的确认,有效负载是具有以下属性的 a:NackedAmqpMessageException

  • failedMessage:发送失败的春季消息。Message<?>

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

没有自动处理这些异常(例如发送到死信队列)。 您可以在自己的 Spring Integration 流中使用这些异常。