【发布时间】:2018-07-04 12:28:13
【问题描述】:
我正在处理一项需要向
消息通道使用消息驱动适配器从ibm mq 获取数据。
消息通道由poller 轮询(包含maxmessagesperchannel 的soap 服务供应商要求的限制),将这些消息发送到我的服务激活器。Serviceactivator(soap 客户端)依次连接到soap 服务并获取在根据 Message 中的标头值进行一些逻辑后返回响应。
当我收到某些错误代码时,我需要重新处理此特定消息。
我有这个外部肥皂服务供应商的要求,我们以指数方式重试或重新发送此消息。例如,如果在 1s、1m 和 1 小时后重试发生连续失败,则需要 1 秒、1 分钟、1 小时。
如果 1 小时后重试失败,我们将其放入目前不关心的手动检查队列。
为了重试我们在 spring 集成中实现 RequestHandlerCircuitBreakerAdvice 的请求,并抛出一个自定义的 reprocessingexception (runtimex),它正在触发 circuitbreaker 并动态更改 circuitbreakers halfOpenAfter 的值,但这并不能解决我们的目的。
我们如何确保失败的请求只是在电路打开后重试的请求。
还有一个问题是poller 在circuitbreaker 打开时持续运行,导致其他消息也失败。
所有失败的消息都转到默认的errorChannel 以获取更多信息。?
里特什
【问题讨论】: