Apache camel 如何通过ActiveMQ在驼峰路由之间高效地传递XML文档

Apache camel 如何通过ActiveMQ在驼峰路由之间高效地传递XML文档,apache-camel,activemq,Apache Camel,Activemq,我有一系列检索、转换、拆分和组合XML文档的驼峰路线。这一切都很好 这些路由由ActiveMQ主题和队列链接 一切都好 但是,在某些情况下,我需要处理大量文档,而且因为Camel的JMS组件将XML文档转换为消息的文本,队列导致将XML呈现为字符串,并多次对文档进行重新解析,这是一个巨大的处理开销 我尝试将JMS生产者jmsMessageType设置为Object,但当使用者检索消息时,我输出exchange.getIn.getBody.getClass.getCanonicalName,我得到

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

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

一切都好

但是,在某些情况下,我需要处理大量文档,而且因为Camel的JMS组件将XML文档转换为消息的文本,队列导致将XML呈现为字符串,并多次对文档进行重新解析,这是一个巨大的处理开销

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

对于直接通过ActiveMQ主题/队列传递的XML文档对象,我需要对生产者和消费者进行哪些设置,而不需要呈现为字符串并重新解析

感谢您的关注。

谢谢您的DOM和Camel。引用Xerces文档,如果它真的更有效,这是值得怀疑的:

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

还有另一个问题:Camel的Java序列化数据格式已被弃用,并且有可能在即将发布的Camel版本中被删除。不过,该实现非常简单,如果不推荐,您可以添加一个复制当前Camel的自定义数据格式

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

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
  ...