使用与netty4相同连接的两个不同的camel路由

时间:2017-07-05 17:57:41

标签: sockets synchronization apache-camel netty

我有两个使用netty4组件的路由应该读取和写入相同的套接字连接但由于某种原因不能正常工作。

第一个

newUrl

第二个:

from("netty4:tcp://SERVER:PORT?decoder=#packet-decoder&encoder=#packet-encoder&clientMode=true")
.to("seda:inbound") 

请注意,第一个(“from”)被配置为客户端,第二个(“to”one)本质上是客户端。

即使我在第二个中使用了reuseChannel并且正在调用“PacketEncoder”编码方法,也不会抛出异常,而是不发送数据。

from("seda:dispatch")
.to("netty4:tcp://SERVER:PORT?decoder=#packet-decoder&encoder=#packet-encoder&sync=true&reuseChannel=true")
.process(new Processor() {
                    @Override
                    public void process(Exchange exchange) throws Exception {
                          logger.info("Packet received: " + exchange.getIn().getBody());
                    }
                });

最后,在第二个路由中,永远不会调用“to”端点之后的处理器。以下内容被卡在NettyProducer内部。

我做错了什么?

2 个答案:

答案 0 :(得分:0)

<camelContext id="camel" xmlns="http://camel.apache.org/schema/spring">

    <route>
        <description>test</description>
        <from uri="activemq:Test" />
        <to   uri="netty4:tcp://localhost:22822?clientMode=true&amp;sync=true&amp;allowDefaultCodec=false&amp;reuseChannel=true"/>
    </route>
<route>
        <description>Connessione dal ControlCenter alla coda</description>
        <from uri="netty4:tcp://localhost:22822?clientMode=true&amp;sync=true&amp;decoders=#string-decoder&amp;reuseChannel=true" />
        <to   uri="activemq:Test2"/>
    </route>
</camelContext>

我使用它,但是每次打开新的tcp客户端时都不起作用

答案 1 :(得分:-1)

也许你应该将reuseChannel选项添加到第一个端点“from”。通道保存在交换中,因此必须在创建交换的端点中设置该选项。