处理Amqp.outboundAdapter中的异常

时间:2019-09-11 22:56:27

标签: spring-boot spring-integration spring-amqp spring-integration-dsl

我正在使用发布商通过Amqp.outboundAdapter进行确认,并且我想正确处理异常情况。

根据以下适配器;

  1. 如何捕获网络/连接失败
  2. 如何捕获在ack和nack通道中引发的异常?
  3. 如何配置超时以确认?

// 代码

IntegrationFlows
                    .from("inputChannel")
                    .handle(Amqp.outboundAdapter(rabbitTemplate)
                            .confirmAckChannel(ackChannel())
                            .confirmNackChannel(nackChannel())
                    );

谢谢。

1 个答案:

答案 0 :(得分:1)

  

如何捕获网络/连接失败

为此,您可以添加请求处理程序建议,例如ExpressionEvaluatingRequestHandlerAdviceRequestHandlerRetryAdvicehttps://docs.spring.io/spring-integration/reference/html/#message-handler-advice-chain

或者那个将被扔到上游的调用者线程,您可以在其中使用普通的try..catcherrorChannel对其进行处理。

  

如何捕获在ack和nack通道中引发的异常?

这些渠道是其特定流程的起点。为避免将异常抛出到ConfirmCallback中,应考虑将then设为QueueChannelExecutorChannel。这样,您将进行线程转换,并且这些流应具有自己的错误处理。请求处理程序建议链或errorChannel可能是相同的方式。

  

如何配置超时确认?

似乎没有超时这样的选项可以确认配置。 但是,您可以使用RabbitTemplate API使它们过期:

/**
 * Gets unconfirmed correlation data older than age and removes them.
 * @param age in milliseconds
 * @return the collection of correlation data for which confirms have
 * not been received or null if no such confirms exist.
 */
@Nullable
public Collection<CorrelationData> getUnconfirmed(long age) {