Java ApacheCamel:在使用rest端点后向调用方发送响应

Java ApacheCamel:在使用rest端点后向调用方发送响应,java,apache-camel,Java,Apache Camel,我是Apache Camel的新手,我有一个Camel rest端点,它接收一些JSON数据并对数据库表进行一些更改。数据是由某个应用程序通过POST请求发送的,我想通过在完成驼峰路由后返回带有一些信息的响应代码来通知该应用程序整个处理是否正常/KO。有办法吗 编辑: 为了提供更多信息,整个模式如下所示: // PART 1 from(rest:restEndpoint) .process(someProcessing) // process number 1 .to(activ

我是Apache Camel的新手,我有一个Camel rest端点,它接收一些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 

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

当您得到一个调用了REST端点(同步)的驼峰路由时,您已经发回了响应

在路由中,当请求传入时,将处理第1部分。消息发送到ActiveMQ(异步)后,Camel立即向调用者发回响应,因为路由的同步部分已经完成

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

因此,当您想要修改响应主体时,只需在第1部分末尾添加一个转换即可

...
.to(activemq:queue:somequeue)
.transform().constant("Response body")
现在来看看更难的部分

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

您可以使用JMS模拟同步处理。看看吧。如果这样做,Camel将在向ActiveMQ发送消息后等待回复

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

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

我得回去问问你的来电者是否支持这一点。传统的HTTP请求只有一个响应。如果打电话的人收到了,她就会停止听。对于第二个响应,她必须执行第二个请求


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

当您得到一个包含被调用的REST端点(同步)的驼峰路由时,您已经发回了响应

在路由中,当请求传入时,将处理第1部分。消息发送到ActiveMQ(异步)后,Camel立即向调用者发回响应,因为路由的同步部分已经完成

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

因此,当您想要修改响应主体时,只需在第1部分末尾添加一个转换即可

...
.to(activemq:queue:somequeue)
.transform().constant("Response body")
现在来看看更难的部分

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

您可以使用JMS模拟同步处理。看看吧。如果这样做,Camel将在向ActiveMQ发送消息后等待回复

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

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

我得回去问问你的来电者是否支持这一点。传统的HTTP请求只有一个响应。如果打电话的人收到了,她就会停止听。对于第二个响应,她必须执行第二个请求


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

您可以添加您尝试过的内容吗?您可以添加您尝试过的内容吗?感谢您的回复,我了解了您关于同步案例的观点,我在描述中添加了更多细节,你对我们处理队列时的情况有什么想法吗?我已经扩展了我的回答谢谢你的回答,我了解你关于同步案例的观点,我在描述中添加了更多细节,你对我们处理队列时的情况有什么想法吗?我已经扩展了我的回答