当前位置: 首页 > 知识库问答 >
问题:

Apache Camel:在使用restendpoint后向调用方发送响应

督劲
2023-03-14

我是Apache Camel的新手,我有一个Camel restendpoint,它接收一些JSON数据并对数据库表进行一些更改。数据是由某个应用程序通过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 

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

共有1个答案

浦修文
2023-03-14

当您得到一个带有调用的RESTendpoint(同步)的骆驼路由时,您已经发回了一个响应。

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

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

因此,当您想要修改您的响应体时,您可以简单地在第1部分的末尾添加一个转换

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

现在来看看更硬的部分

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

所以有了这个机制,Camel在第一部分之后不发送响应,而是在第二部分做完之后才发送响应。

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

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

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

 类似资料:
  • 我有一个restendpoint示例。org,返回表单的json响应 我的路线是这样的 我读过关于轮询消费者的内容,但找不到如何继续轮询endpoint的示例,直到它返回“success”响应。 是否应该使用轮询消费者?如果是这样的话,可以举一个与我的案例相关的例子。用于轮询restendpoint的任何其他资源都非常有用。

  • 这是一个经过验证的API,我试图调用...我可以看到,OPTIONs调用返回200 OK和适当的响应头,仍然火狐不发送API调用,完美地工作在Chrome...有什么想法吗 一些值隐藏在下面... 响应报头 HTTP/1.1 200 OK 访问-控制-允许-起源:* 访问-控制-允许-方法:[POST,GET] 访问-控制-允许-报头:授权 日期:周三,02 Oct 2013 20:52:02 G

  • 我正在尝试使用Netty编写RTSP服务器。 现在,客户端发送请求 我想发回以下回复 我应该使用什么来构造http响应。我应该使用HttpResponse还是只使用普通字节数组并将其转换为ByteBuf? 我使用的Netty版本是4.1.5 提前谢谢。

  • 我是Node.js的初学者,所以根据项目要求,我试图从Node.js调用REST服务,我从这个SO问题中获得了如何调用rest的信息。这是进行rest调用的代码: 问题是我想发送作为对浏览器的响应,我尝试了但它给我抛出了错误“写入方法未找到”。我到处都在文档中查找,但他们给出的只是console.log.有人能让我知道如何将该数据作为响应发送到浏览器吗?

  • 我用JacksonAnnotationIntrospector设置了一个自定义注释,以便根据API版本吐出正确的属性名称。根据API版本,有一个助手类可以输出正确的ObjectMapper。 还有一个帮助函数用于测试序列化 在这样的单元测试中: 现在,假设我有这样的东西: 用户扩展实体时: 我知道映射程序单独返回正确的JSON。我可以直接把电话插进去。实体(),但这会导致我们的测试出现问题,测试会

  • 问题内容: 我正在执行以下ajax调用: 这是我的PHP: 创建销售后,我想重定向到addcust.php?New_sale = $ sale_id 我该怎么做? 问题答案: 您成功重定向: 无论您从PHP脚本回显什么,都将在中。因此,echo ,您将获得您的URL。