【问题标题】:Spring integration Implement retry for a failed message with exponential backoff in ServiceactivatorSpring集成在Serviceactivator中使用指数退避实现失败消息的重试
【发布时间】:2018-07-04 12:28:13
【问题描述】:

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

【问题讨论】:

    标签: spring-integration ibm-mq


    【解决方案1】:

    使用retry adviceExponentialBackOffPolicy 代替断路器。

    【讨论】:

    • 嗨,加里,如果您可以建议,我仍然需要在以下情况下的帮助,1) 当我们从外部服务收到特定错误 10 秒、50 秒时,我们为用例配置了重试建议,等等长达一小时。如果我们得到像超时这样的错误,我们会使用断路器建议打开一个断路器,持续 3 秒 halfOpenAfter,但我们的外部肥皂服务可能会有 1 小时的停机时间。我们使用任务执行器 20 池。 20/sec 使用 poller frm a channel 进行轮询(源是 ibm mq)。在大停机时间,许多消息可以进入重试可能会耗尽执行器。我们可以配置为不耗尽执行器吗?
    • 我们可以配置在大停机的情况下使用 Jmx 配置停止轮询器吗?问候,Ritesh
    • 您可以在执行程序上使用调用者运行或调用者阻止拒绝策略。是的,您可以通过直接引用或向控制总线发送消息来停止轮询器。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-01
    • 2019-02-22
    • 1970-01-01
    • 2021-07-04
    • 1970-01-01
    相关资源
    最近更新 更多