使用ServerInitializerFactory Netty 4

时间:2015-09-17 09:07:19

标签: grails apache-camel activemq netty

我在grails中使用apache camel netty4,我已将mycustom ServerInitializerFactory声明如下

public class MyServerInitializerFactory extends ServerInitializerFactory {
    private int maxLineSize = 1048576;
    NettyConsumer nettyConsumer

    public MimacsServerInitializerFactory() {}

    @Override
    protected void initChannel(Channel channel) throws Exception {
        ChannelPipeline pipeline = channel.pipeline()
        pipeline.addLast("logger", new LoggingHandler(LogLevel.INFO))
        pipeline.addLast("framer", new LengthFieldBasedFrameDecoder(ByteOrder.LITTLE_ENDIAN, maxLineSize, 2, 2, 6, 0, false))
        pipeline.addLast("decoder", new MfuDecoder())
        pipeline.addLast("encoder", new MfuEncoder())
        pipeline.addLast("handler", new MyServerHandler())
    }
}

我有一条路线,我在路线建设者中设置如下。

from('netty4:tcp://192.168.254.3:553?serverInitializerFactory=#sif&keepAlive=true&sync=true&allowDefaultCodec=false').to('activemq:queue:Tracking.Queue')

我的Camel Context在BootStrap.groovy中设置如下

def serverInitializerFactory = new MyServerInitializerFactory()
SimpleRegistry registry = new SimpleRegistry()
registry.put("sif", serverInitializerFactory)

CamelContext camelContext = new DefaultCamelContext(registry)
camelContext.addComponent("activemq",  activeMQComponent.activeMQComponent("failover:tcp://localhost:61616"))
camelContext.addRoutes new TrackingMessageRoute()
camelContext.start()

当我运行我的应用程序时,我的路由已启动,我的成帧器,解码器,处理程序和编码器都被调用但消息未到达跟踪。队列和响应不会回到客户端。

如果我不在netty url和用户编码器和解码器中使用serverInitializerFactory,我的消息正在访问队列,但我失去了对我收到的每种消息类型的确认的控制权。似乎activemq试图发送自己的响应,但我的编码器拒绝了。

我是否应该编写代码再次发送或者是否有我遗漏的内容?

2 个答案:

答案 0 :(得分:0)

您需要为消费者添加一个处理程序,以便它可以被路由,请参阅单元测试如何完成:

答案 1 :(得分:0)

我成功解决了这个问题。在我的channelRead0方法中。我添加了以下行

Exchange exchange = this.consumer.getEndpoint().createExchange(ctx, msg);

其中ctx是ChannelContextHandler而msg是Message Object,这两个都是channelRead0方法的参数。

我还添加了以下行

this.consumer.createUoW(exchange);

在处理代码之后我插入了以下行

this.consumer.doneUoW(exchange);

一切都像魅力一样。