我正在使用 Apache Camel DSL 并试图弄清楚如何路由消息,就像这样。这是逻辑,没有任何 Camel DSL。
- 消息进入队列
- 叫豆
- 如果 bean 没有异常
- 使用原始消息调用另一个 bean
我的问题是我不确定如何使用原始消息进入步骤 3.a。对 bean 的调用会更改消息。我可以使用多播、两个管道和标头变量,但据我所知,这些标头变量在管道的范围内。
任何想法表示赞赏!谢谢!
我正在使用 Apache Camel DSL 并试图弄清楚如何路由消息,就像这样。这是逻辑,没有任何 Camel DSL。
我的问题是我不确定如何使用原始消息进入步骤 3.a。对 bean 的调用会更改消息。我可以使用多播、两个管道和标头变量,但据我所知,这些标头变量在管道的范围内。
任何想法表示赞赏!谢谢!
您可以在序列模式下使用多播 eip
<from uri="somewhere"/>
<multicast>
<to uri="bean:beanA"/>
<to uri="bean:beanB"/>
</multicast>
多播默认以顺序模式运行,所以首先调用beanA。如果成功,它会调用 beanB,但会使用原始消息(我们调用 beanA 时使用的同一消息的副本)。
您可以在此处阅读有关多播 EIP:http: //camel.apache.org/multicast.html
从你的第二个 bean,只需调用exchange.getUnitOfWork().getOriginalInMessage()
我最终将消息的内容存储在一个变量中,并在更改后将消息设置回该内容,就像这样......
<!-- 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>