我有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

07-26 04:10