我有两个应用程序,一个使用带有Netty组件的Camel发送UDP消息,另一个使用DatagramChannel在Java NIO中接收UDP消息 .
在接收数据时,我在消息前面添加了额外的29个字节 . Netty Camel打印出传出的字节,它看起来很好,但是当我在另一端消息进入时我会执行packet.getData(),它在前面有额外的东西(并且它总是相同的字节) .
Camel或Netty在发送之前是否包装了数据包?
[编辑]其他信息:
-Camel正在打印日志语句,而不是Netty
- 当消息内容发生变化时,消息前面的字节会发生变化(只有两个字节被更改)
1 回答
我知道这个问题现在已经很老了,但我确实遇到了这个问题,我花了一些时间才找到解决方案 . 所以这里......
基本上问题归结为当你告诉它发送一个像UDP数据包中的byte []那样足够低级的东西时,camel-netty会做什么的混淆 . 我希望像我这样的OP假设他们正在设置原始数据,但是camel-netty默认使用Java对象序列化 - 导致在预期数据之前出现那些额外的“随机”字节 .
解决方案是更改有问题的 endpoints 使用的编码器/解码器 . 有各种内置替代品,但如果你需要更多东西,你可以将它们子类化......很奇怪 . 无论哪种方式,该过程是:
1)根据需要将“encoder =#myEncoder”和“decoder = #myDecoder”选项添加到 endpoints URI . 例如
2)将“myEncoder”的映射添加到新的Encoder类的实例到Camel Registry . myDecoder也一样 . 然后在构造CamelContext时使用该注册表 . 例如
显然,真正的诀窍是寻找或制作适合您需求的编码器/解码器 . znetdevelopment上的一篇博文真的对我有所帮助,虽然它更进一步,将自定义编码器放入自定义管道(我忽略了这一点) .