Apache Camel netty udp消费者没有解码器就无法工作

时间:2015-01-13 17:35:50

标签: apache-camel netty

如果我有跟随camel路由并发送udp消息,则不会将任何内容打印到stdout:

    <route>
        <from uri="netty:udp://0.0.0.0:5000"/>
        <to uri="mock:stdout"/>
    </route>

但是,如果我添加一个解码器,我可以看到udp消息打印在stdout上

<bean class="org.jboss.netty.handler.codec.string.StringDecoder" id="stringDecoder">
    <constructor-arg value="UTF-8"/>
</bean>

<camelContext xmlns="http://camel.apache.org/schema/spring">
    <route>
        <from uri="netty:udp://0.0.0.0:5000?decoder=#stringDecoder"/>
        <to uri="mock:stdout"/>
    </route>
</camelContext>

有人可以解释为什么默认解码器不会将消息传递给模拟端点。它在等待EOF类型的信号吗?

我正在使用以下方式发送消息:

$ cat json.txt | nc -4u -w1 hostname 5000

Apache camel netty页面解释了:

allowDefaultCodec == true
Camel 2.4: The netty component installs a default codec if both,
encoder/deocder is null and textline is false. 
Setting allowDefaultCodec to false prevents the netty component from installing a 
default codec as the first element in the filter chain.

1 个答案:

答案 0 :(得分:0)

字符串解码器要求您使用新行来终止字符串。所以请务必在发送时加入。

例如在javadoc和代码示例中,您可以看到他们使用\n https://docs.jboss.org/netty/3.2/api/org/jboss/netty/handler/codec/string/StringDecoder.html