如何将Camel路由连接到REST服务以接收事件流

q43xntqr  于 9个月前  发布在  Apache
关注(0)|答案(1)|浏览(80)

在Camel路由中,我需要用HTTPGET请求连接到一个服务,并保持连接打开以接收事件。Camel连接从不接收来自服务的事件。
我可以使用Postman成功执行此操作:successful Postman connection,所以我知道服务正在按预期运行。
My Camel Route以GET方式调用服务端点,并在此调用的头部使用Postman中使用的相同参数:

.setHeader(Exchange.HTTP_METHOD, constant(org.apache.camel.component.http.HttpMethods.GET))
.setHeader("Connection", simple("keep-alive"))
.setHeader("Accept", simple("text/event-stream"))
.setHeader("Accept-Encoding", simple("gzip, deflate, br"))
.setHeader("Postman-Token", simple("6ec7dfb3-6a4e-46ad-9f29-329a854f2649"))
.to("http://localhost:5000/events")

我知道服务接收到这个调用并创建事件消息发送回去,但是Camel路由从来没有接收到这些消息。此外,与Camel连接同时建立的Postman连接也会接收事件消息。

Q)如何正确配置Camel路由接收服务事件?

l7wslrjt

l7wslrjt1#

OkHttpClient可与RealEventSource和自定义EventSourceClient配合使用,接收服务端事件。

步骤:
1.创建一个自定义的 * EventSource * 类,它扩展了 * EventSource *,并具有处理来自 RealEventSource 的事件的方法。

  • onEvent()处理从 Service 接收的服务器端事件数据
  • onOpen()、onClose()、onFailure()也可能有用

1.创建一个示例化您的 * Client* 类

  • 创建OkHttpClient
  • 创建要发送到 * 服务 * 的请求
  • 创建一个RealEventSource(Request,**)
  • sort. add(sort);

1.为访问您的 Service 所需的值创建 * Token * 类
1.在camel Route类中示例化 Client

  • Client myClient = new Client();
  1. in Route.configure()调用
    .process(new Processor(){ public void process(Exchange exchange)throws Exception { myClient.Connect();})的情况
    参考:OkHttpClientrealeventsource

相关问题