重用路由进行入站/出站通信

时间:2014-08-25 11:00:54

标签: java apache-camel netty

我有以下两条路线:

路线1

from("netty:tcp://localhost:5050?textline=true&encoder=#customStringEncoder&decoder=#customDecoder")
            .routeId("inboundSocketRoute")
            .doTry()
            .unmarshal(beanIO)
            .bean(inboundInterfaceProcessor, "processInterfaceData")
            .doCatch(ValidationException.class, UnidentifiedRecordException.class, InvalidRecordException.class)
            .bean(inboundInterfaceProcessor, "processInterfaceDataError")
            .end();

路线2

String server = "123.45.67.89:5050";
from("jms://queue:evOutboundDataInterface")
            .routeId("outboundInterfaceRoute")
            .doTry()
            .bean(outboundInterfaceProcessor, "processOutboundData")
            .to("netty:tcp://" + server + "?textline=true&requestTimeout=10000&encoder=#customStringEncoder&decoder=#customDecoder")
            .bean(outboundInterfaceProcessor, "processSequence")
            .doCatch(ReadTimeoutException.class)
            .bean(outboundInterfaceProcessor, "handleTimeout")
            .doCatch(ConnectException.class)
            .bean(outboundInterfaceProcessor, "handleConnectionError")
            .end();

路由1由来自外部服务器的传入数据触发。传入的数据由BeanIO解析,最终到达我的InterfaceProcessor,后者处理入站数据。路由2由JMS消息(由我的软件发送)触发,它应该将消息发送回同一端口上的外部服务器。

在我目前的设置中,我启动自己的服务器(路由1)和客户端(路由2)。我不认为这会起作用,因为两个连接都是活跃的。这样,当我想从路由2向外部服务器发送消息时,它可能无法连接到外部服务器。但是,当我在路由1上收到消息时,我可以通过让inboundInterfaceProcessor.processInterfaceData()返回String来向外部服务器发送消息(从绑定到该路由的处理器内)将被发送到外部服务器。

由于我能够从路由1向外部服务器发送消息,因此我考虑从inboundInterfaceProcessor触发outboundInterfaceProcessor以向外部服务器发送消息从路线2.我该怎么做? Camel / Netty甚至可以实现这一点吗?或者我应该使用另一种方法解决这个问题?

1 个答案:

答案 0 :(得分:0)

我通过让外部服务器轮询通常通过第二条路径发送的数据来解决这个问题。每条消息都会收到一条确认消息,因此当入站接口收到此确认时,我可以检查更多的外发接口数据。这不是理想的,但它确实有效。 :)