|
这个版本仍在开发中,尚未达到稳定状态。要使用最新稳定版,请使用 spring-cloud-stream 5.0.1 ! |
Error Channels
从版本1.3开始,绑定器会无条件地将每个消费者目标的异常发送到错误通道,并且还可以配置为将异步生产者发送失败发送到错误通道。
请参阅“错误处理”了解更多信息。
RabbitMQ有两种类型的发送失败:
-
返回的消息,
-
被否定确认发布者确认。
后一种情况很少见。
根据 RabbitMQ 文档,[一个 nack] 只有在负责队列的 Erlang 进程中发生内部错误时才会被传递。
如果你发布到具有 reject-publish 队列溢出行为的有限队列,也可能获得负面确认。
除了启用生产者错误通道(如“错误处理”中所述)外,RabbitMQ绑定器只有在连接工厂正确配置的情况下才会将消息发送到通道,如下所示:
-
ccf.setPublisherConfirms(true); -
ccf.setPublisherReturns(true);
使用Spring Boot配置连接工厂时,设置以下属性:<br>
-
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 集成流程来执行异常.没有自动处理 these exceptions (如正在发送到 付款保存队列). You can consume these exceptions with your own Spring Integration flow.