处理通过tcp接收的消息(右数据类型,方法等解释)

时间:2014-02-17 12:55:16

标签: apache-camel netty

目前,我在自编写组件中通过tcp接收消息,允许我将Netty用作TCP服务器生产者。

我收到的邮件格式为XML,例如:

<customheader>
<someattribute></someattribute>
</customheader>
<custombody>
</custombody>

我收到的消息存储在byte[]中,并将其发送到另一个端点我通过以下方式创建新的交换:

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

现在我的问题:

  • 我对新交换的态度是否正确?
  • 如果想要摆脱标头或使用其他驼峰组件,我是否需要将receivedbytesbyte[]转换为其他数据类型或byte[]好吗?< / LI>
  • 如果我想删除自定义标题,可以使用camel中的remove header组件吗?

感谢您的帮助

1 个答案:

答案 0 :(得分:0)

您正在创建新的Exchange,但您实际上并未使用它。相反,您只能使用它来访问CamelContext。方法sendBody正在为您创建一个新的Exchange,而这个Exchange实际上是发送到someendpointuri指定的端点。请注意,每次要发送消息时都会you should not create a new producer template

当您说您将邮件存储为byte[]时,我假设您将邮件存储在邮件正文中。在这种情况下,您将customheadercustombody存储为byte[],Camel将它们视为邮件正文,而不是标题。

如果您想使用与Camel标头相关的组件或语言结构,您需要解析customheader,然后使用Exchange.getIn().setHeaders()see API将其设置在消息标题上附有关于此的说明)。如果您这样做,您可能只想在custombody中设置Exchange.getIn().setBody()的内容。

如果在自定义组件中进行了这些更改,则组件现在将仅处理此特定XML格式。如果您希望保持组件的通用性,则可以改为实现自定义DataFormat并在路由中调用marshal()unmarshal()。我认为SOAP DataFormat做的事非常相似。