Jms 退避在Apache Camel重新交付中不起作用
(驼峰版本2.14.1) 我试图让Camel使用退避重新交付策略重试msg-to-JMS(实际上是MQ-over-JMS)。以下是我得到的:Jms 退避在Apache Camel重新交付中不起作用,jms,apache-camel,Jms,Apache Camel,(驼峰版本2.14.1) 我试图让Camel使用退避重新交付策略重试msg-to-JMS(实际上是MQ-over-JMS)。以下是我得到的: errorHandler(defaultErrorHandler() .maximumRedeliveries(-1) .useExponentialBackOff() .backOffMultiplier(2) .maximumRedeliveryDelay(30000) .retryAttemptedLogLe
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");
我对这里应该发生的事情的理解是,初始超时将是1000毫秒。之后,骆驼将等待2000毫秒,然后是4000毫秒,等等,直到我们到达30000毫秒
正在发生的事情是消息被重试,但每次都是1000毫秒
为了得到我想要的结果,我可能需要在上面的代码中修改什么
TIA解决了这个问题
以下是可用的配置参数(有很多)
在错误处理程序上:
defaultErrorHandler()
.maximumRedeliveries(-1)
.useExponentialBackOff()
.backOffMultiplier(2)
.maximumRedeliveryDelay(10000)
.redeliveryDelay(500)
在URI上:
requestTimeout=400&
requestTimeoutCheckerInterval=300
这里有一些情况的表现非常不同
场景A)JMS服务器已关闭。
如果服务器关闭,则URI中的字段(requestTimeout
和requesttimeoutcheckenterval
)将永远不会播放。使用上述设置,您应该会看到重试延迟:500、1000、2000、4000、8000、10000、10000、10000
场景B)JMS服务器已启动,但另一端的消费者尚未响应。
requestTimeout值从不增加,但重试延迟为。因此,您将看到重试延迟:90014002400 4400840010400104001040010400
为什么??因为它需要400毫秒(请求超时实际失败,然后errorHandler计时器启动)
哥查斯!!!
- 这是一个来自
的日志消息:*MessageListenerContainer
无法刷新目标“REPLY.A.QUEUE”的JMS连接-正在使用FixedBackOff重试{interval=5000,currentAttempts=67,maxAttempts=unlimited}
这与重试消息无关,它发生在另一个线程中。那件事是在转移注意力
必须始终是这只是一个偶然的机会,但是您是否尝试过requestTimeoutCheckerInterval
而不是transactionErrorHandler()
?我没有-错误处理程序需要Spring TransactionTemplate,我在我的应用程序中没有使用它defaultErrorHandler()