0

我正在使用 Apache Camel DSL 并试图弄清楚如何路由消息,就像这样。这是逻辑,没有任何 Camel DSL。

  • 消息进入队列
  • 叫豆
  • 如果 bean 没有异常
    • 使用原始消息调用另一个 bean

我的问题是我不确定如何使用原始消息进入步骤 3.a。对 bean 的调用会更改消息。我可以使用多播、两个管道和标头变量,但据我所知,这些标头变量在管道的范围内。

任何想法表示赞赏!谢谢!

4

3 回答 3

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

于 2012-11-30T08:07:19.997 回答
1

从你的第二个 bean,只需调用exchange.getUnitOfWork().getOriginalInMessage()

于 2012-11-29T22:29:05.050 回答
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>
于 2012-12-05T01:01:22.783 回答