我有一系列的骆驼路线,它们检索,转换,拆分和组合XML文档。这一切都很好。
这些路由通过ActiveMQ主题和队列链接。
一切都很好。
但是,在某些情况下,我要处理大量文档,并且由于Camel的JMS组件将XML文档转换为消息的文本,因此队列导致将XML呈现为字符串,然后重新解析为文档不止一次,这是相当大的处理开销。
我尝试将JMS生产者jmsMessageType
设置为Object
,但是当消费者检索消息并输出exchange.getIn().getBody().getClass().getCanonicalName()
时,我得到java.lang.String
。
我需要对XML Document对象的生产者和使用者进行哪些设置,以便直接通过ActiveMQ主题/队列传递而不呈现为String并重新解析?
感谢您的光临。
答案 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
...