我在 apache Camel 中构建了一个 Web 服务,作为 karaf 上的 bundle 运行,它接受请求并将信息保存在数据库中。
在此之后,另一个包获取此插入的记录,修改数据并将其保存回数据库。
现在我需要原始请求的响应来包含修改后的数据,因此除了如下所示的 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>
有什么办法可以做到这一点吗?
最佳答案
您必须将正文设置为所需的响应,作为第一条路线的最后一步。无法在此路由之外设置响应。
所以我认为有两种方法可以解决您的问题。
- 以同步方式在第一个路由内完成您需要做的所有事情
- 将您的服务更改为完全异步
对于变体 2,您可以使用 jms 之类的消息传递,或者为第一个调用提供一个 Web 服务 URI 以进行回调。
如果您的服务负载很高,完全异步的方法可能会让您的系统工作得更好。
关于java - 另一条 route 的 Apache Camel 蓝图 Web 服务响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32754970/