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