Java Apache Camel多播路由相互干扰
我在Camel DSL中使用多播,因为我需要将同一消息的副本发送到两个不同的端点。然而,这些路线似乎相互干扰。我是否有语法错误,或者其他问题Java Apache Camel多播路由相互干扰,java,apache-camel,Java,Apache Camel,我在Camel DSL中使用多播,因为我需要将同一消息的副本发送到两个不同的端点。然而,这些路线似乎相互干扰。我是否有语法错误,或者其他问题 from("{{in.endpoint}}") .routeId(this.getClass().getSimpleName()) .multicast().parallelProcessing() .to("{{update.in}}", "{{add.ibmmq.topic}}); 在哪里 in.endpoint =
from("{{in.endpoint}}")
.routeId(this.getClass().getSimpleName())
.multicast().parallelProcessing()
.to("{{update.in}}", "{{add.ibmmq.topic}});
在哪里
in.endpoint = seda:addOrder?waitForTaskToComplete=Never
update.in = seda:updateData?waitForTaskToComplete=Never
add.ibmmq.topic = an ibmmq topic
我希望“update”路由接收“in”消息,“ibmmq topic”接收相同的消息,可能是克隆的。但是,在日志中,我得到了如下异常:
Exchange[
Id ID-slon12d10628-1228-1386074869307-0-44746
ExchangePattern InOnly
Headers {breadcrumbId=ID-slon12d10628-1228-1386074869307-0-41682, calendar=null, CamelMyBatisResult=[integration.model.EInquiry@19eb77c, integration.model.EInquiry@12059ce, xxxxxxx
BodyType message.BulkAddOrderMsg
Body message.BulkAddBondOrderMsg@77df22
]
但是EInquiry对象是由一个完全独立的路由读入的,与此路由无关,只是它也向“in.endpoint”发送消息
另一件事是因为我从Tibco读取并发送到IBMMQ,我必须清除JMS头代码,因为它们不兼容,所以我将:
exchange.getIn().getHeaders().clear();
在我的“更新”路线中。这可能是因为清除了Camel的exchange跟踪头并导致了这个问题,基本上类似于一些奇怪的并发问题吗?如果没有完整的源代码,很难找到错误,但请记住,多播不能进行深度复制 如果Order对象中有子对象,则它们不会重复,并且在两条SEDA路线之间共享
您可能需要对该对象进行自定义深度克隆您的Exchange主体是一条自定义POJO:message。BulkAddBondOrderMsg@77df22... 这意味着除非您添加深度克隆,否则没有深度克隆可用。如果主体是DOM XML节点,也会发生同样的情况
在多播之前将POJO序列化为字符串,以便在交换机之间共享。我不知道,谢谢。但这两条路径实际上都不会改变底层对象。我怀疑罪魁祸首可能更多地与清除报头有关,因为Camel似乎混淆了来自不同、不相关路由的交换,而不仅仅是多播路由。。。