当前位置: 首页 > 知识库问答 >
问题:

Spring integration在Serviceactivator中使用指数退避实现对失败消息的重试

慕容恩
2023-03-14

我正在处理一项任务,该任务要求在读取请求消息通道(Queuechannel)中的消息后向外部soap服务客户端发送请求,该通道的原始源是IBM MQ
消息通道使用消息驱动适配器从IBM MQ获取数据。
消息通道由轮询器轮询(通过MaxMessagesPerChannel)将这些消息发送到服务激活器。
ServiceActivator(soap client)依次连接到soap服务,并在根据消息中的标头值生成一些逻辑后返回响应。
外部soap服务供应商要求我们以指数方式重试或重发此消息。例如1s,1分钟,如果在1s后的重试中发生连续失败,1m和1小时。
如果1小时重试失败,我们将其放入手动检查队列,这是目前不关心的。
要重试我们在spring integration中实现的请求RequestHandlerCircuitBreakerAdvision,并抛出一个自定义的ReprocessingException(runtimex),它正在触发CircuitBreakers,并动态更改CircuitBreakersHalfOpenAfter值,但这并不能解决我们的导致其他消息也失败。
所有失败的消息都转到默认的errorchannel其他信息。?里特什

共有1个答案

常小白
2023-03-14

使用带有exponentialbackoffpolicy的重试通知,而不是断路器。

 类似资料:
  • null 有没有一种方法可以在Spring RestTemplate中使用指数退避?

  • 我有一个要求,如果我从消息驱动bean调用的服务(Restful服务)关闭或没有返回成功,我需要将消息回滚到队列,等待一段时间(指数),然后再次从队列读取消息,并尝试连接到服务。 我正在尝试的是: 在方法中,如果我从调用Restful服务的服务接收到异常,我将使用我可以执行类似于; 但是如何确保以指数级增长? 也许我需要保持豆子的状态,但有人能建议我怎么做吗?

  • 我在使用新的0.3.0-beta版WebJobs SDK的WebJob中有以下逻辑。当我的代码处理消息失败时,Azure仪表板将显示聚合异常(这是有意义的,因为这是异步的)。但是,它不会重试处理消息。 我能找到的非常小的留档表明消息应该在失败后10分钟内重试。新的SDK不是这样吗? 我得到的异常源于SQL超时异常(在我的代码中是针对SQL Azure的db查询):

  • 我是这个Spring集成和JMS的新手,我开始使用它。在这里,我想通过activemq创建普通的jms消息,并通过spring inbound适配器(消息驱动)接收它。 以下是我的spring配置文件 这是我的测试课。 } 但问题是我不能保证交货。有些时候程序不能接收消息,有些时候它成功了,但有一些警告,如 无法刷新目标“queue://MSG_QUEUE”的JMS连接,将在5000毫秒后重试,原

  • 我的处理来自的消息。周期性地,按摩无法处理,消费者抛出异常。不管怎样,消费者还是会做出补偿。在Kafka中,我能区分成功消息和失败消息吗?我想,我不能。这是真的吗?如果这是真的,我有一个主要问题: 如何重试失败消息?我知道一些方法,但我不确定它们是否正确。 1) 将“偏移”更改为“提前”。但通过这种方式,成功消息也会重试。 2) 当我捕捉到异常时,我会将此消息发送到另一个主题(例如错误主题)。但这