首页 > 解决方案 > Apache Camel:使用休息端点后向调用者发送响应

问题描述

我是 Apache Camel 的新手,我有一个骆驼休息端点,它接收一些 JSON 数据并对数据库表进行一些更改。数据是由某个应用程序通过 POST 请求发送的,如果整个处理正常/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 

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

标签: javaapache-camel

解决方案


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

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

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

因此,当您想修改响应正文时,只需在 PART 1 的末尾添加一个转换即可

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

现在到更难的部分

在异步第二部分之后发送响应

您可以使用 JMS 模拟同步处理。请参阅Camel JMS 文档的这一部分。如果你这样做,Camel 会在向 ActiveMQ 发送消息后等待回复。

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

在两个处理步骤之后发送响应

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

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


推荐阅读