对于Apache Camel,可能有一半的路由是同步的,而后半部分是异步的吗?

时间:2016-04-07 14:42:51

标签: apache-camel

我目前有一个暴露cxf端点的camel路由。当消息通过端点传出时,我首先会使用来自另一个Web服务的一些信息来丰富该消息,然后再进行更多处理。但是,我想让这条路线的前半部分同步,这样我就可以回复一个叫做暴露的cxf端点的人。

路线看起来像这样:

from(cxf:CxfEndpoint)
    .process(someProcessing)
    .to(cxf:ExternalCxfEndpoint)
    .to(activemq:queue:somequeue)

//return a response back to caller here

from(activemq:queue:somequeue)
    ... //additional processing here
    ...

原因是因为当通过我公开的cxf端点发出消息时,我不知道它是否是有效消息。我需要首先使用消息丰富来验证它。一旦消息丰富,我想让任何发送消息的人知道他们的消息被接受但不希望他们等待消息通过整个路由,因为这可能需要几个小时。

有谁知道这会如何运作?

提前致谢!

2 个答案:

答案 0 :(得分:0)

我相信您需要做的就是将exchangePattern设置为 InOnly a.k.a.将其设为Event Message。这应该让您的路线不等待ActiveMQ的回复。骆驼交换默认为 InOut ,当它来自网络服务时,就像你的情况一样。

与Camel dev here的答案相关的问题。

另请参阅this one,了解有关经纪人停业时的行为的详细信息。

答案 1 :(得分:0)

肯定是,100%可能。一个简单的例子就是:

  1. 来自cxf端点

  2. 将您的请求存储在camel属性或标题

  3. to xslt - 为cxf端点生成xslt - 同步流

  4. 使用set body重置原始有效负载。

  5. Wiretap Endpoint - 到任何下游端点甚至是路由,这都变为异步。这不会参与上述同步响应。

  6. 注 - 步骤2&可能不需要4,这取决于您的使用案例。

    你可以做很多事情,我给出了一个非常简单的例子。它也不需要窃听,但窃听有助于我们不再编写任何额外的自定义异常处理。