【发布时间】:2017-12-23 11:49:28
【问题描述】:
我正在使用 Camel 和 Netty 设置一个场景,其中客户端连接到服务器,中间有一个应用程序(只是一个名为 Router 的虚拟应用程序)。
SocketClient 连接到Router(端口53379),Router 连接Server(端口53383)。问题是数据包永远不会到达服务器(虽然它确实到达了路由器,但我使用处理器对其进行了调试)。
如果我将 SocketClient 连接到服务器,它工作正常。
感谢任何帮助。
完整来源
路由器:
public class Router {
public static void main(String[] args) throws Exception {
SimpleRegistry registry = new SimpleRegistry();
registry.put("ByteArrayEncoder", new ByteArrayEncoder());
registry.put("ByteArrayDecoder", new ByteArrayDecoder());
CamelContext context = new DefaultCamelContext(registry);
context.addRoutes(new RouteBuilder() {
@Override
public void configure() throws Exception {
from("netty4:tcp://localhost:53379?encoders=#ByteArrayEncoder&"
+ "decoders=#ByteArrayDecoder"
+ "&sync=true"
+ "&keepAlive=true")
.to("netty4:tcp://localhost:53383?encoders=#ByteArrayEncoder&"
+ "decoders=#ByteArrayDecoder"
+ "&sync=true"
+ "&keepAlive=true");
}
});
context.start();
while(true) {
Thread.sleep(1000);
}
}
}
服务器:
public class Server {
public static void main(String[] args) throws Exception {
SimpleRegistry registry = new SimpleRegistry();
registry.put("ByteArrayEncoder", new ByteArrayEncoder());
registry.put("ByteArrayDecoder", new ByteArrayDecoder());
CamelContext context = new DefaultCamelContext(registry);
context.addRoutes(new RouteBuilder() {
@Override
public void configure() throws Exception {
from("netty4:tcp://localhost:53383?encoders=#ByteArrayEncoder&"
+ "decoders=#ByteArrayDecoder"
+ "&sync=true"
+ "&keepAlive=true")
.process(new Processor() {
public void process(Exchange exchange) throws Exception {
Message message = exchange.getIn();
System.out.println("from este_stub: " + message.getBody());
exchange.setOut(message);
}
});
}
});
context.start();
while(true) {
Thread.sleep(1000);
}
}
}
客户:
public class SocketClient {
public static void main(String[] args) throws UnknownHostException, IOException {
Socket socket = new Socket("localhost", 53379);
OutputStream simOutStream = socket.getOutputStream();
BufferedInputStream simInStream = new BufferedInputStream(socket.getInputStream());
byte[] arr = new byte[] {1, 2, 3, 4, 5};
simOutStream.write(arr, 0, arr.length);
simOutStream.flush();
byte[] resp = new byte[5];
simInStream.read(resp, 0, resp.length);
for(byte ar : resp)
System.out.print(ar);
socket.close();
}
}
【问题讨论】:
标签: apache-camel netty