Jms 如何使用ApacheCamel来适应这种消息传递逻辑?
我正在使用ApacheCamel DSL,并试图找出如何路由消息,如下所示。这里的逻辑,没有任何骆驼DSLJms 如何使用ApacheCamel来适应这种消息传递逻辑?,jms,activemq,apache-camel,Jms,Activemq,Apache Camel,我正在使用ApacheCamel DSL,并试图找出如何路由消息,如下所示。这里的逻辑,没有任何骆驼DSL 消息进入队列 呼叫豆 如果bean没有异常 使用原始消息调用另一个bean 我的问题是,我不确定如何使用原始消息进入步骤3.a。对bean的调用会更改消息。我可以使用一个多播、两个管道和头变量,但从我所知道的情况来看,这些头变量在管道的作用域内 任何想法都很感激!谢谢 从第二个bean调用exchange.getUnitOfWork().getOriginalMessage()从第
- 消息进入队列
- 呼叫豆
- 如果bean没有异常
- 使用原始消息调用另一个bean
任何想法都很感激!谢谢 从第二个bean调用
exchange.getUnitOfWork().getOriginalMessage()
从第二个bean调用exchange.getUnitOfWork().getOriginalMessage()
您可以在顺序模式下使用多播eip
<from uri="somewhere"/>
<multicast>
<to uri="bean:beanA"/>
<to uri="bean:beanB"/>
</multicast>
默认情况下,多播以顺序模式运行,因此首先调用beanA。如果这是成功的,它调用beanB,但是使用原始消息(我们称之为beanA的同一消息的副本)
您可以在此处阅读有关多播EIP的信息:您可以在顺序模式下使用多播EIP
<from uri="somewhere"/>
<multicast>
<to uri="bean:beanA"/>
<to uri="bean:beanB"/>
</multicast>
默认情况下,多播以顺序模式运行,因此首先调用beanA。如果这是成功的,它调用beanB,但是使用原始消息(我们称之为beanA的同一消息的副本)
您可以在此处阅读有关多播EIP的信息:我将消息的内容存储在一个变量中,并在更改后将消息设置回该内容,如下所示
<!-- 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>
${body}
${body}
..基于该输出设置一组变量,然后
<!-- get original message to run some more logic-->
<camel:setBody><camel:simple>${headers.marc}</camel:simple></camel:setBody>
${headers.marc}
我最终将消息的内容存储在一个变量中,并在更改后将消息设置回该内容,就像这样
<!-- 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>
${body}
${body}
..基于该输出设置一组变量,然后
<!-- get original message to run some more logic-->
<camel:setBody><camel:simple>${headers.marc}</camel:simple></camel:setBody>
${headers.marc}
谢谢。不过,我的bean不做任何路由。我可以在Spring DSL中获得原始消息吗?谢谢。不过,我的bean不做任何路由。我可以在Spring DSL中获得原始消息吗?谢谢。但是,我的bean返回我需要在其上运行xsl的输出。这不会覆盖原始消息吗?我现在有一个带有两个管道的多播。我在第一个管道中设置了一些头变量,但在第二个管道中需要它们。然而,它们不在范围之内。我找不到关于这些变量范围的任何信息。有什么想法吗?谢谢。你会返回任何东西吗?如果它是一个void方法,你可以不用多播就直接调用它。那么消息体就不会改变。在beanA中,您仍然可以添加新的标题等,谢谢。但是,我的bean返回我需要在其上运行xsl的输出。这不会覆盖原始消息吗?我现在有一个带有两个管道的多播。我在第一个管道中设置了一些头变量,但在第二个管道中需要它们。然而,它们不在范围之内。我找不到关于这些变量范围的任何信息。有什么想法吗?谢谢。你会返回任何东西吗?如果它是一个void方法,你可以不用多播就直接调用它。那么消息体就不会改变。在beanA中,您仍然可以添加新的标题等。