我知道这个问题现在很老了,但我碰到这个问题,我花了一段时间才找到解决方案。所以这里是...
基本上,这个问题归结为当你告诉它发送一个足够低级别的数据时,camel-netty会做什么,就像在UDP数据包中发送一个字节[]一样。我希望像我一样,OP认为他们正在设置原始数据,但camel-netty默认使用Java Object Serialization - 导致在预期数据之前出现额外的“随机”字节。
解决方案是更改相关端点使用的编码器/解码器。有各种内置的选择,但如果你需要更奇怪的东西,你可以继承它们。无论哪种方式,过程如下:
1)根据需要在端点URI上添加“encoder =#myEncoder”和“decoder =#myDecoder”选项。例如
String destinationUri = "netty:udp://localhost:4242"
+ "?sync=false&encoder=#myEncoder";
2)添加从“myEncoder”映射到新的编码器类般地注册一个实例。对于myDecoder也一样。然后在构建CamelContext时使用该注册表。例如
SimpleRegistry registry = new SimpleRegistry();
registry.put("myEncoder", new StringEncoder());
registry.put("myDecoder", new StringDecoder());
CamelContext camelContext = new CamelContext(registry);
显然,真正的诀窍在于寻找或制作一个适合您需求的编码器/解码器。 znetdevelopment的博客文章确实对我有所帮助,尽管它更进一步,并将自定义编码器放入自定义管道(我忽略了这一点)。
感谢您的回答!很好,终于找出它在底下做了什么。我们结束了双方纯粹的NIO,因为我们发现camel-netty实现对我们的需求来说太慢了。 – mdnghtblue 2014-01-27 18:50:02