我正在使用Apache Camel DSL并试图弄清楚如何路由消息,就像这样。这是逻辑,没有任何Camel DSL。
我的问题是我不确定如何使用原始邮件进入步骤3.a.对bean的调用会更改消息。我可以使用多播,两个管道和标头变量,但从我可以看出这些标头变量在管道范围内。
任何想法都表示赞赏!谢谢!
答案 0 :(得分:2)
您可以在序列模式下使用多播eip
<from uri="somewhere"/>
<multicast>
<to uri="bean:beanA"/>
<to uri="bean:beanB"/>
</multicast>
默认情况下,多播以序列模式运行,因此首先调用beanA。如果这是成功的话,它会调用beanB,但是使用原始消息(我们称之为beanA的同一消息的副本)。
您可以在此处阅读有关多播EIP的信息:http://camel.apache.org/multicast.html
答案 1 :(得分:1)
,只需致电exchange.getUnitOfWork().getOriginalInMessage()
答案 2 :(得分:0)
我最终将消息内容存储在变量中,并在消息更改后将消息设置回该内容,如此...
<!-- store original content in header variable -->
<camel:setHeader headerName="marc"><camel:simple>${body}</camel:simple></camel:setHeader>
<!-- run some logic, output gets saved as another header variable, message as this point is now that output -->
<camel:bean ref="getPidsForUpdate"/>
<camel:setHeader headerName="pids"><camel:simple>${body}</camel:simple></camel:setHeader>
....根据该输出设置一堆变量,然后
<!-- get original message to run some more logic-->
<camel:setBody><camel:simple>${headers.marc}</camel:simple></camel:setBody>