如何使用Apache Camel通过TCP发送/接收二进制数据

如何使用Apache Camel通过TCP发送/接收二进制数据,tcp,apache-camel,Tcp,Apache Camel,我看到了许多使用ApacheCamel通过TCP连接发送或接收数据的示例,只要数据是text。例如,设置端点,如netty:tcp://localhost:5000?textline=true。这里需要注意的重要一点是选项textline=true的用法。这在处理文本时效果很好,如果只是字节,效果就不太好了 除了发送二进制数据(不是序列化的Java对象)而不是文本之外,我如何做同样的事情?据我所知,似乎我需要指定要使用的编解码器(而不是使用textline=true时的默认文本编解码器),但我不

我看到了许多使用ApacheCamel通过TCP连接发送或接收数据的示例,只要数据是text。例如,设置端点,如
netty:tcp://localhost:5000?textline=true
。这里需要注意的重要一点是选项
textline=true
的用法。这在处理文本时效果很好,如果只是字节,效果就不太好了

除了发送二进制数据(不是序列化的Java对象)而不是文本之外,我如何做同样的事情?据我所知,似乎我需要指定要使用的编解码器(而不是使用
textline=true
时的默认文本编解码器),但我不知道如何做到这一点

我在Camel网站或其他任何地方都找不到任何好的例子来说明如何做到这一点

更新[2018年7月19日星期四10:43:10美国东部夏令时]:

我设法取得了一定程度的成功。我创建了一个简单的
DataFormat
,并将其插入到流中:

public class ByteArrayFormat implements DataFormat {
  @Override
  public void marshal(Exchange exchange, Object object, OutputStream ostream) throws Exception {
    byte[] bytes = exchange.getContext().getTypeConverter().mandatoryConvertTo(byte[].class, object);
    ostream.write(bytes);
  }
  @Override
  public Object unmarshal(Exchange exchange, InputStream istream) throws Exception {
    byte[] bytes = exchange.getContext().getTypeConverter().mandatoryConvertTo(byte[].class, istream);
    return bytes;
  }
}
我不是100%肯定这是有效的,因为我可能只看到unmarshal在行动。欢迎提出任何建议或更正

然后我修改了我的路线如下:

    public void configure() {
      from("netty4:tcp://localhost:5000?allowDefaultCodec=false&sync=false").unmarshal(new ByteArrayFormat())
          .process(processor).to("file://test");
    }
测试“处理器”只不过是从exchange获取输入流并将数据转储到控制台。“to”只是将它得到的东西放在一个文件中,这样我也可以在那里查看它

然后我做了一个简单的测试,通过管道传输二进制文件的内容(通过
nc
)并观察发生了什么。据我所知,我以字节的形式接收了文件的数据


不过有一个重要的警告。结果被分解为1024字节块(我假设这是网络堆栈施加的限制),因此3862字节的原始文件被转换为1024字节块的四个“接收”(实际上是3 x 1024+790)。任何关于如何“缝合”这些数据的想法或建议都会很有帮助。

所有数据都有一些有意义的格式。如果没有一种内置格式适合您,您可以创建自己的格式吗?我不需要创建格式,只需要获取通过TCP连接传输的字节。我该怎么做呢?我明白了,但是ApacheCamel并不是设计来做这件事的。您所描述的内容可以不用Camel,使用普通的套接字连接来完成。好的,让我澄清一下。我正在尝试编写一些可以从多种源(而不是同时)接收数据的东西,比如ActiveMQ上的XML,或者在本例中,是TCP或UDP上的专有二进制格式。这就是为什么我要用骆驼。我试图利用(如果可以的话)Camel简化发送或接收信息的一些过程。我想您没有访问这种专有数据格式的权限?