繁体   English   中英

Apache骆驼蓝图Web服务响应的另一条路线

[英]Apache camel blueprint web service response in another route

我在apache骆驼中在karaf上捆绑运行了一个Web服务,该服务接收请求并将信息保存在数据库中。

在另一个捆绑软件获取此插入的记录之后,修改数据并将其保存回数据库。

现在,我需要原始请求的响应以包含修改后的数据,因此除了看起来像这样的Web服务路由之外

<route id="cxf">
    <from uri="cxf:bean:getHopEndpoint" />
    <recipientList>
        <simple>direct:${header.operationName}</simple>
    </recipientList>
</route>
<route id="getHop">
    <from uri="direct:getHop" />
    <process ref="getHopToDbProcessor" />
    <to
        uri="sql:INSERT INTO myTable (field1, field2) VALUES (:#field1, :#field2)"/>
</route>

我需要另一个这样的

<route id="cxfResponse">
    <from uri="sql:SELECT * FROM myTable"/>
    <!-- to web service response in any way -->
</route>

有什么办法吗?

在第一条路线的最后一步,您必须将主体设置为所需的响应。 无法在此路由之外设置响应。

因此,我认为有两种方法可以解决您的问题。

  1. 以同步方式在第一条路线内做所有您需要做的事
  2. 将您的服务更改为完全异步

对于变体2,您可以使用jms之类的消息传递,也可以给第一个调用Web服务uri的回调。

如果您在服务上负载很高,则完全异步方法可能会使您的系统更好地工作。

我找到了另一个解决方案:我正在使用Direct VM Component 我的路线现在看起来像这样:

捆绑软件1接收Web服务请求并将数据保存在数据库中:

<route id="cxf">
    <from uri="cxf:bean:getHopEndpoint" />
    <recipientList>
            <simple>direct:${header.operationName}</simple>
    </recipientList>
</route>
<route id="getHop">
    <from uri="direct:getHop" />
    <process ref="getHopToDbProcessor" />
    <to uri="sql:INSERT INTO myTable (field1, field2) VALUES (:#field1, :#field2)" />
    <to uri="direct-vm:processHop" />
</route>

在处理我刚刚插入的数据的捆绑软件2中:

<route>
    <from uri="direct-vm:processHop"/>
    <to uri="sql:SELECT * FROM myTable WHERE processed = false" />
    <process ref="getHopComputopUrlProcessor" />
    <to uri="sql:UPDATE webshop_gethop_requests SET new_data = :#newData, processed = true WHERE some_id = :#someId" />
    <to uri="direct-vm:response"/>
</route>

然后再次返回到捆绑1,以发送带有已处理数据的响应:

<route>
    <from uri="direct-vm:response" />
    <to uri="sql:SELECT some_id,new_data FROM myTable WHERE some_id = :#someId AND processed = true" />
    <process ref="getHopResponseProcessor" />
</route>

这对我来说很好:)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM