我是netty和camel的新手,正在尝试使用apache camel及其netty4组件创建代理。
我想从服务器接收数据,将数据转发到seda队列,然后将其从seda队列发送到另一台需要先执行握手的服务器。
我现在遇到的问题是,当我尝试添加自定义编码器/解码器时,在扩展ChannelInboundHandlerAdapter时,我从未从channelRead方法中的seda队列接收数据
到目前为止,我已经尝试过不使用解码器/编码器,并且通过路由转发数据并在目标服务器上接收数据,但是当将解码器添加到目标服务器netty组件时则不会。
NettyCamelPractice.java
public class NettyCamelPractice {
public static void main(String args[]) throws Exception {
Main camelMain = new Main();
try {
camelMain.getOrCreateCamelContext();
camelMain.bind("testDecoderHandler", new TestDecoderHandler());
camelMain.addRouteBuilder(new NettyCamelPracticeRouteBuilder());
camelMain.run();
} finally {
camelMain.shutdown();
}
}
}
NettyCamelPracticeRouteBuilder.java
public class NettyCamelPracticeRouteBuilder extends RouteBuilder {
@Override
public void configure() throws Exception {
testRoute();
sedaQueue();
}
public void testRoute() {
System.out.println("here");
from("netty4:tcp://127.0.0.1:1234?clientMode=true&textline=true")
.to("seda:tmp_queue");
}
public void sedaQueue() {
from("seda:tmp_queue")
.log(LoggingLevel.INFO, "Got the message - ${body}")
.to("netty4:tcp://127.0.0.1:5678?textline=true&decoder=#testDecoderHandler");
}
}
TestDecoderHandler.java
public class TestDecoderHandler extends ChannelInboundHandlerAdapter {
private Logger logger = LogManager.getLogger(TestDecoderHandler.class);
@Override
public void channelActive(ChannelHandlerContext ctx) throws Exception {
Channel inboundChannel = ctx.channel();
logger.info("ChannelActive");
ctx.writeAndFlush("ACK");
}
@Override
public void channelRead(ChannelHandlerContext ctx, Object msg) {
logger.info("ChannelRead");
ByteBuf msgBuf = (ByteBuf) msg;
String message = msgBuf.toString(CharsetUtil.UTF_8);
logger.info(message);
}
@Override
public void channelReadComplete(ChannelHandlerContext ctx) {
logger.info("ChannelReadComplete");
}
}
我希望数据从第一条网络路线流向seda队列。然后从seda队列到目标净值组件,在此首先在自定义解码器内执行一次握手,然后发送接收到的数据。任何帮助将不胜感激。