Spring集成在Serviceactivator中对具有指数补偿的失败消息实施重试

时间:2018-07-04 12:28:14

标签: spring-integration ibm-mq

我正在执行一项任务,该任务要求向外部肥皂服务客户端发送请求,该请求是在请求消息通道(队列通道)中读取消息且原始来源为{{ 1}}。
消息通道使用消息驱动适配器从ibm mq获取数据。
消息通道由ibm mq进行轮询(结合了poller肥皂服务供应商要求的限制),并将这些消息发送到我的服务激活器。
maxmessagesperchannel(soap客户端)依次连接到soap服务,并根据Message中的标头值做出一些逻辑后得到响应。
当我收到某些错误代码时,我需要重新处理此特定消息。
我要求该外部肥皂服务供应商以指数方式重试或重新发送此消息,例如1s,1分钟,1小时,如果在1s,1m和1小时后重试发生顺序故障。
如果1小时后重试失败,我们会将其放入当前不需关注的手动检查队列。
为了重试这些请求,我们在春季集成中实现了Serviceactivator并抛出了一个自定义RequestHandlerCircuitBreakerAdvice(runtimex),该触发器触发reprocessingexception并动态更改circuitbreaker circuitbreakers的值,但是不能解决我们的目的。
我们如何确保失败的请求只是电路断开后重试的请求。
还有一个问题是halfOpenAfter打开时poller连续运行,导致其他消息也失败了。
所有失败的消息都会转到默认的circuitbreaker,以获取更多信息。 里特什

1 个答案:

答案 0 :(得分:0)

retry adviceExponentialBackOffPolicy一起使用,而不要使用断路器。