Apache Camel Netty Socket

时间:2015-11-24 09:23:20

标签: tcp apache-camel netty

我想在客户端模式下使用apache camel netty连接。此客户端也不处于同步模式。我提供了以下配置来实现此目的,但是appache创建了两个连接到服务器1用于接收消息和一个用于回复它。我们如何在这种模式下使用netty连接器。

from("netty4:tcp://localhost:7000?sync=false&allowDefaultCodec=false&encoder=#stringEncoder&decoder=#stringDecoder&clientMode=true&reconnect=true&reconnectInterval=1000")
            .process(new Processor() {
                public void process(Exchange exchange) throws Exception {
                    exchange.getOut().setBody("Hello " + exchange.getIn().getBody());
                }
            })
            .to("netty4:tcp://localhost:7000?sync=false&allowDefaultCodec=false&encoder=#stringEncoder&decoder=#stringDecoder&clientMode=true");

并且在Hercules中我看到了这个请求处理的两个连接

11:00:51 AM:  127.0.0.1 Client connected
11:00:51 AM:  127.0.0.1 Client connected

1 个答案:

答案 0 :(得分:1)

所以这就是你想要的吗? “在收到来自服务器的请求之后。我想在MQ中推送它并在其他MQ上等待处理的响应。因此,当处理数据包并在MQ中可用时,我想使用相同的连接将响应传输到套接字”。

首先,可能就某些要求达成一致意见。如果您需要发回一个响应,即客户端正在等待收到有关它发送的请求的回复,那么它应该是同步通信而不是异步。

所以你可以简单地写一下:

from("netty4:tcp://localhost:7000?sync=true&allowDefaultCodec=false&encoder=#stringEncoder&decoder=#stringDecoder&clientMode=true&reconnect=true&reconnectInterval=1000")
            .process(new Processor() {
                public void process(Exchange exchange) throws Exception {
                    exchange.getOut().setBody("Hello " + exchange.getIn().getBody());
                }
            })
            .to("ACTIVE_MQ");

当然,在活动的mq部分你需要设置回复和超时,这样如果你没有及时得到响应,它会超时,你会通过一些好的错误信息通知客户端。

将会收到消息,并使用适当的回复属性将其发送到活动的mq队列。如果收到消息,则通过同一连接将响应发送回客户端。

我建议你继续阅读Camel中的JMS请求/回复,因为它将帮助你设置活动的mq部分。 http://camel.apache.org/jms.html