Apache camel 对于ApacheCamel,是否可以将一半路由同步,另一半路由异步?

Apache camel 对于ApacheCamel,是否可以将一半路由同步,另一半路由异步?,apache-camel,Apache Camel,我目前有一个公开cxf端点的驼峰路由。当一条消息通过端点时,我会首先使用来自另一个Web服务的一些信息来丰富该消息,然后再进行更多的处理。但是,我希望使此路由的前半部分同步,这样我就可以将响应发送回调用我的公开cxf端点的人 路线如下所示: from(cxf:CxfEndpoint) .process(someProcessing) .to(cxf:ExternalCxfEndpoint) .to(activemq:queue:somequeue) //return a

我目前有一个公开cxf端点的驼峰路由。当一条消息通过端点时,我会首先使用来自另一个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端点时,我不知道它是否是有效消息。我需要首先用消息充实来验证它。一旦消息内容丰富,我想让发送消息的人知道他们的消息已被接受,但不想让他们等待消息通过整个路径,因为这可能需要几个小时

有人知道这是怎么回事吗


提前谢谢

我相信你所需要做的就是将它设置为a.k.a.让它成为一个。这应该使您的路由不会等待ActiveMQ的答复。当Camel-exchange源于web服务时,它将默认为InOut,就像您的情况一样

一个相关的问题和骆驼开发人员的回答


另请参阅,以了解有关经纪人下跌时行为的详细信息。

是的,当然,100%可能。一个简单的例子是:

  • 从cxf端点

  • 将请求存储在camel属性或头中

  • 到xslt-为cxf端点生成xslt-同步流

  • 使用set body重置原始有效载荷

  • Wiretap Endpoint-对于下游的任何端点,甚至是路由,这将变为异步。这不会参与上述同步响应

  • 注意-步骤2和4可能不是必需的,这取决于您的用例


    你可以做很多事情,我只是举了一个非常简单的例子。它也不需要是wiretap,但wiretap帮助我们不编写任何额外的自定义异常处理

    那么,如果中途将路由从InOut()更改为InOnly(),为什么会发生这种情况呢?消息中的副本是否会立即返回回回调位置,消息是否会正常进行?仅设置交换模式本身不会做任何事情,但它会影响随后调用的端点的行为。在您的情况下,您可以并且应该只使用InOnly模式调用activeMQ端点,这样就不会等待代理的响应。但是,你真的应该尝试一下,因为我自己还没有做过,所以这只是一个理论。我一定会用一个基本的方法来尝试。谢谢