gpt4 book ai didi

java - Camel 归还 : How do I retry processing a message from a certain point back

转载 作者:行者123 更新时间:2023-12-01 09:55:00 29 4
gpt4 key购买 nike

我想申请重新投递并使用死信 channel 。所以发现这个非常有用的apache-camel FAQ link 。我按照本网站中提到的步骤进行操作。

我添加了更多逻辑,代码可以在 github 中找到。 .

基本上,根据常见问题解答,我们必须拆分路由,以便(如常见问题解答中所述) Camel 可以处理子路由中的任何异常。这是代码( Camel 路线):

    @Override
public void configure() throws Exception {
errorHandler(deadLetterChannel("mock:error")
.logExhaustedMessageBody(true)
.logExhausted(true)
.logRetryStackTrace(true)
.maximumRedeliveries(3)
.redeliveryDelay(1000)
.backOffMultiplier(2)
.useOriginalMessage()
.useExponentialBackOff());

from("direct:start")
.log("Dump incoming body: " + body())
.to("direct:sub")
.end();

from("direct:sub")
.errorHandler(noErrorHandler())
.process(new SubRouteProcessor())
.log("Dump incoming body: "+ body())
.process(new NewSubRouteProcessor())
.transform(body().append("Modified Data !"))
.to("mock:result");
}

我编写了一个简单的单元测试,以触发异常,从而执行重新传递代码。

现在的困难/问题:预期的行为是仅进行 3 次重新传送尝试,延迟 1000 毫秒,并采用 ExponentialBackOff。

但是,测试会永远运行,并以指数延迟继续重新交付。如果我删除/注释 2 个处理器调用,代码确实运行良好,意味着在出现异常时,它只重试 3 次。

请您帮忙理解一下,1)这段代码/路线有什么问题?2)是什么导致代码永远运行?3)为什么删除这些处理器,它有效,重试发生只说次数?

我只是想要 - 当“direct:sub”抛出“异常”时,控制返回到“direct:start”,从某个点重新尝试处理消息。

谢谢!!

最佳答案

我检查了您的代码,只需在两个处理器中将 getOut 更改为 getIn,测试就通过了。

编辑:我从一开始就怀疑您的处理器以某种方式覆盖了 Camel 设置的 header ,以便进行一定数量的重新交付。对于您的情况:

CamelRedelivered=true, CamelRedeliveryCounter=1, CamelRedeliveryMaxCounter=3

当您在 getOut 交换上设置 Body 时,CamelRedeliveryCounter header 并未增加。在我看来,它应该是一个错误;但也许它正在按设计工作?也许@claus-ibsen 可以帮助解决这个问题。

希望这有帮助。

R。

关于java - Camel 归还 : How do I retry processing a message from a certain point back,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37310144/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com