【问题标题】:Apache Camel : Send a response to the caller after consuming a rest endpointApache Camel:使用休息端点后向调用者发送响应
【发布时间】:2020-06-22 08:31:48
【问题描述】:

我是 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 

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

【问题讨论】:

  • 您可以添加您尝试过的任何内容吗?

标签: java apache-camel


【解决方案1】:

当您获得带有被调用的 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 消息等)发送第二个异步响应。但是所有这些解决方案都要求您的调用方提供这样的替代通信渠道。

【讨论】:

  • 感谢您的回复,我明白您关于同步案例的观点,我在描述中添加了更多细节,您对我们处理队列时的案例有一些了解吗?
  • 我已经扩展了我的答案
猜你喜欢
  • 1970-01-01
  • 2016-09-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多