Apache camel 处理通过tcp接收的消息(正确的数据类型、方法等)

Apache camel 处理通过tcp接收的消息(正确的数据类型、方法等),apache-camel,netty,Apache Camel,Netty,目前,我在一个自编组件中通过tcp接收消息,该组件允许我使用Netty作为tcp服务器生产者 我收到的消息采用XML格式,例如: <customheader> <someattribute></someattribute> </customheader> <custombody> </custombody> 现在我的问题是: 我对新交易所的做法正确吗 例如,如果要删除标头或使用其他camel组件,是否需要将receive

目前,我在一个自编组件中通过tcp接收消息,该组件允许我使用
Netty
作为tcp服务器生产者

我收到的消息采用
XML
格式,例如:

<customheader>
<someattribute></someattribute>
</customheader>
<custombody>
</custombody>
现在我的问题是:

  • 我对新交易所的做法正确吗
  • 例如,如果要删除标头或使用其他camel组件,是否需要将
    receivedbytes
    byte[]
    转换为其他数据类型,或者
    byte[]
    是否可以
  • 如果我想删除自定义标题,我可以使用camel中的remove header组件吗

感谢您的帮助

您正在创建一个新的Exchange,但实际上并没有使用它。相反,您只使用它来访问上下文。方法
sendBody
正在为您创建一个新的交换,而实际上正是此交换被发送到由
someendpointuri
指定的端点。请注意,每次您想要发送消息时

当您说您将消息存储为
byte[]
时,我假定您将其存储在消息体中。在这种情况下,您将
customheader
s和
custombody
存储为
byte[]
,Camel将它们都视为消息体,而不是消息头

如果要使用与Camel头相关的组件或语言构造,则需要解析
customheader
s,然后使用
Exchange.getIn().setHeaders()
将它们设置为消息头(请注意)。如果这样做,您可能只想在
Exchange.getIn().setBody()中设置
custombody
的内容

如果您在自定义组件中进行这些更改,那么您的组件现在将只处理这种特定的XML格式。如果您想让组件保持通用性,可以改为在路由中实现自定义和调用
marshal()
unmarshal()
。我认为他做了一些非常相似的事情

Exchange exchange = new DefaultExchange(endpoint);
exchange.getContext().createProducerTemplate().sendBody("someendpointuri", receivedbytes);