我有2条骆驼路线:
from("jms:queue:" + queue + "?transacted=true")
.bean(interfaceProcessor, "prepareMessage")
.to("direct:interfaceRoute")
.end();
from("direct:interfaceRoute")
.errorHandler(noErrorHandler())
.setExchangePattern(ExchangePattern.OutIn)
.to("netty:tcp://" + address + ":" + port + "?clientMode=true&requestTimeout=" + requestTimeout + "&disconnect=true")
.bean(interfaceProcessor, "doStuff");
将消息放入JMS队列时触发第一条路由。然后,该消息在Bean中进行处理,并将返回值放在单独的路由上,以将其发送到远程主机。
当
direct:interfaceRoute
出现问题时,Netty应该以客户端的身份打开到特定地址/端口的新连接。这可以正常工作,但是当远程主机不可用时,我得到一个ConnectException
并完全停止运行。如果发生这种情况,它需要继续重试,直到远程主机可用为止。我尝试制作“上层”路由
transacted
,并删除了实际在套接字上发送的路由上的所有错误处理程序。这对于ReadTimeoutException
有效(远程主机没有及时响应)。发生这种情况时,将重新发送该消息,直到远程主机作出响应。我需要对ConnectException
进行相同的处理。我该如何实现?
最佳答案
目前不支持。但是我们将在下一个版本中添加对此的支持。有一张票
https://issues.apache.org/jira/browse/CAMEL-8894