我知道这个问题现在已经很老了,但我正好遇到了这个问题,我花了一段时间才找到解决方案。所以这里...
基本上问题归结为当你告诉camel-netty在UDP数据包中发送足够低级别的东西(如字节[])时会做什么的混淆。我希望像我一样,OP 假设他们正在设置原始数据,但是 camel-netty 默认使用 Java 对象序列化 - 导致那些额外的“随机”字节出现在预期数据之前。
解决方案是更改相关端点使用的编码器/解码器。有各种内置的替代品,但如果你需要更多……奇怪的东西,你可以对它们进行子类化。无论哪种方式,过程是:
1) 将适当的“encoder=#myEncoder”和“decoder=#myDecoder”选项添加到端点 URI。例如
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上的一篇博文确实帮助了我,尽管它更进一步并将自定义编码器放入自定义管道中(我忽略了这一点)。