- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想申请重新投递并使用死信 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/
我是一名优秀的程序员,十分优秀!