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

退避在Apache Camel重新交付中不起作用

吉鸿宝
2023-03-14

我试图让Camel使用退避重发策略重试一个msg到JMS(实际上是MQ over JMS)。以下是我得到的:

errorHandler(defaultErrorHandler()
    .maximumRedeliveries(-1) 
    .useExponentialBackOff()
    .backOffMultiplier(2)
    .maximumRedeliveryDelay(30000)
    .retryAttemptedLogLevel(LoggingLevel.WARN));

from("direct:in")
    .log("Sending message to MQ")
    .to("mq:MY_QUEUE?requestTimeout=1000");

我对这里应该发生的事情的理解是,初始超时将是1000ms。之后,骆驼将等待2000ms,然后4000ms,等等,直到我们到达30000ms。

正在发生的是,消息被重试,但每次重试1000ms。

我可能需要在上面的代码中更改什么才能得到我要寻找的结果?

TIA

共有1个答案

殷耀
2023-03-14

想通了。

以下是可用的配置参数(有很多)。

在错误处理程序上:

defaultErrorHandler()
    .maximumRedeliveries(-1) 
    .useExponentialBackOff()
    .backOffMultiplier(2)
    .maximumRedeliveryDelay(10000)
    .redeliveryDelay(500)
requestTimeout=400&
requestTimeoutCheckerInterval=300
  • 这里的这个小玩意儿是来自*MessageListenerContainer:
  • 的日志消息

无法刷新目标'reply.a.queue'的JMS连接-使用FixedBackOff正在重试{interval=5000,currentAuthts=67,maxAuthts=unlimited}

这与重试消息无关,它发生在另一个线程中。fixedbackoff这件事是一种转移注意力的做法。

    null
 类似资料:
  • 我试图绘制一个矩形,它的位置每秒钟更新一次,因为我有一个类,它扩展了JPanel,在它里面我重写了油漆(或油漆组件)function_我已经尝试了这两个_但显然这个函数只被调用一次,正如下面的代码所示,当我试图用reaint函数在无限循环中调用它时,它没有被调用,我能做什么? 上面的代码是图形部分,下面是主函数,它位于另一个类中: 在上面的代码中,食物。加法器是矩形位置更新的地方,我已经检查过了,

  • 设置: 我们有一个Spring Boot应用程序,它正在从ActiveMQ Artemis JMS队列读取消息 这些消息正在JPA事务中处理 当在JPA中有一个异常触发回滚时,它也会在Artemis中触发一个JMS回滚,而Artemis设置了重新交付延迟 我们的应用程序在多个实例中并行运行,这在处理共享公共数据的多条消息时会导致乐观锁定问题 问题:当X消息被并行处理并且存在乐观锁定问题时,只有一个

  • 我有一个带有。RecipientList()的动态终结点,我希望在发生异常时更改终结点。下面是我的例子:

  • 我基于@SpencerGibb feign-eureka spring cloud starter示例构建了一个超级简单的Hystrix短路示例。一开始,我以为我不能让hystrix javanica默认的fallbackMethod触发由于虚假…现在,除去feign,hystrix默认的fallbackMethod仍然不能捕获异常。 pom.xml 主文件: java(创建HelloClient

  • 谁能解释一下ActiveMQ重新交付策略实际上是如何工作的?它是在客户端还是在服务器端工作? 假设我有一个重新传递策略,每次尝试之间间隔30分钟,重新传递消息长达10分钟,那么失败的消息到底在哪里? 假设消息现在失败了,30分钟后重新发送,那么消息在哪里? http://activemq.apache.org/redelivery-policy.html http://activemq.apach