Apache Camel:使用休息端点后向调用者发送响应

Apache Camel : Send a response to the caller after consuming a rest endpoint

我是 Apache Camel 的新手,我有一个 camel 休息端点,它接收一些 JSON 数据并对数据库 table 进行一些更改。数据是由某个应用程序通过 POST 请求发送的,如果整个处理是 OK/KO,我想通过在骆驼路线完成后发回包含一些信息的响应代码来通知此应用程序。有办法吗?

编辑: 为了提供更多信息,整个架构将如下所示:

// PART 1
from(rest:restEndpoint)
    .process(someProcessing) // process number 1
    .to(activemq:queue:somequeue)

// PART 2
from(activemq:queue:somequeue)
    .process(someOtherProcessing) // process number 2 

这里的问题是知道是否有办法在完成两个进程中的每一个之后回复调用者应用程序。

当您获得带有调用的 REST 端点(同步)的 Camel 路由时,您已经发回响应。

在您的路线中,当收到请求时,将处理第 1 部分。一旦消息被发送到 ActiveMQ(异步),Camel 就会向调用者发回一个响应,因为你的路由的同步部分已经完成。

默认情况下,响应主体只是同步处理结束时的消息主体。响应码根据处理结果设置(即无错误时为200)。

所以当你想修改你的响应主体时,你可以简单地在 PART 1 的末尾添加一个转换

...
.to(activemq:queue:somequeue)
.transform().constant("Response body")

现在进入更难的部分

异步第二部分后发送响应

您可以使用 JMS 模拟同步处理。请参阅 this part of Camel JMS documentation。如果这样做,Camel 会在向 ActiveMQ 发送消息后等待回复。

因此,使用这种机制,Camel 不会在第一部分之后发送响应,而只会在第二部分完成后才发送响应。

两个处理步骤后发送响应

我得回头问问你的来电者是否支持这个。传统的 HTTP 请求只有一个响应。如果呼叫者收到它,她将停止收听。对于第二个响应,她必须执行第二个请求。

但是,有多个选项可以通过备用通信通道(回调 URL、JMS 消息等)发送第二个异步响应。但是所有这些解决方案都需要您的呼叫者提供这样的替代通信渠道。