Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/368.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Apache Camel多播路由相互干扰_Java_Apache Camel - Fatal编程技术网

Java Apache Camel多播路由相互干扰

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 =

我在Camel DSL中使用多播,因为我需要将同一消息的副本发送到两个不同的端点。然而,这些路线似乎相互干扰。我是否有语法错误,或者其他问题

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似乎混淆了来自不同、不相关路由的交换,而不仅仅是多播路由。。。