如何通过ActiveMQ在骆驼路线之间有效地传递XML文档

时间:2019-04-04 07:38:03

标签: apache-camel activemq

我有一系列的骆驼路线,它们检索,转换,拆分和组合XML文档。这一切都很好。

这些路由通过ActiveMQ主题和队列链接。

一切都很好。

但是,在某些情况下,我要处理大量文档,并且由于Camel的JMS组件将XML文档转换为消息的文本,因此队列导致将XML呈现为字符串,然后重新解析为文档不止一次,这是相当大的处理开销。

我尝试将JMS生产者jmsMessageType设置为Object,但是当消费者检索消息并输出exchange.getIn().getBody().getClass().getCanonicalName()时,我得到java.lang.String

我需要对XML Document对象的生产者和使用者进行哪些设置,以便直接通过ActiveMQ主题/队列传递而不呈现为String并重新解析?

感谢您的光临。

1 个答案:

答案 0 :(得分:0)

supports Java serialization和其骆驼supports Java serialization。值得怀疑的是,它是否真的更有效,请参考Xerces文档:

  

一些粗略的测量表明,XML序列化的性能优于Java对象序列化,并且XML实例文档比对象序列化的DOM需要更少的存储空间。

还有一个问题:不推荐使用Camel的Java序列化数据格式,并且有在即将发布的Camel版本中将其删除的风险。不过,该实现非常简单,如果不建议使用,则可以添加自定义数据格式来复制当前的Camel SerializationDataFormat

如果您想尝试一下,制作人可能会像这样:

from(...)
    // you need to hava Xerces DOM object in the exchange body at this point
    .marshal().serialization()
    .to("jms:myqueue");

...和消费者:

from("jms:myqueue")
  .unmarshal().serialization()
  // you should have your Xerces DOM again
  ...