我正在使用发布商通过Amqp.outboundAdapter进行确认,并且我想正确处理异常情况。
根据以下适配器;
// 代码
IntegrationFlows
.from("inputChannel")
.handle(Amqp.outboundAdapter(rabbitTemplate)
.confirmAckChannel(ackChannel())
.confirmNackChannel(nackChannel())
);
谢谢。
答案 0 :(得分:1)
如何捕获网络/连接失败
为此,您可以添加请求处理程序建议,例如ExpressionEvaluatingRequestHandlerAdvice
或RequestHandlerRetryAdvice
:https://docs.spring.io/spring-integration/reference/html/#message-handler-advice-chain
或者那个将被扔到上游的调用者线程,您可以在其中使用普通的try..catch
或errorChannel
对其进行处理。
如何捕获在ack和nack通道中引发的异常?
这些渠道是其特定流程的起点。为避免将异常抛出到ConfirmCallback
中,应考虑将then设为QueueChannel
或ExecutorChannel
。这样,您将进行线程转换,并且这些流应具有自己的错误处理。请求处理程序建议链或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) {