将响应从gRPC服务流式传输到REST客户端

时间:2019-10-01 17:57:24

标签: java rest spring-boot grpc-java

我正在尝试编写同时使用gRPC和REST的服务。实现技术是Java,Spring Boot和gRPC。示例使用场景如下:

Usage diagram

意图是存在一些外部客户端,它们可以通过REST端点和/或通过进行gRPC调用与应用程序进行交互。在内部,有“网关”服务提供外部接口,并负责在外部客户端和“域”服务之间进行实际工作的传输/路由请求和响应。内部服务将通过gRPC进行通信。

外部客户端不知道内部如何处理事物,域服务没有外部接口。

我已经能够获得一个基本的请求/响应模式,可以端到端地工作,但是我不确定如何实现涉及流传输的模式(双向)。实际上,这并不完全正确-我已经能够使用gRPC网站(https://grpc.io/)上提供的基本示例。

这是我要做的事的一个示例,我似乎无法弄清楚如何进行工作:

“域”服务具有将对象集合(即流源)返回给请求者的能力。域使用gRPC逻辑将这些对象提供给调用客户端(在这种情况下为“网关”)。外部客户端对网关服务进行REST调用,以请求域服务提供的对象集合。

据我所知,域和网关之间可以很好地通信,但是当它尝试将信息发送回外部客户端时会出现问题。有关代码和我遇到的错误的详细信息,请参阅相关问题Problem returning stream of responses from gRPC service to RESTful client

想到的一个问题是:REST是否可以用于处理信息流(双向)?如果不能,我有什么选择(如果有)?如果可以,我该怎么办?

更新

我已经更新了上面引用的同伴SO的发布。

1 个答案:

答案 0 :(得分:0)

您可以尝试StreamingResponseBody(https://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/web/servlet/mvc/method/annotation/StreamingResponseBody.html),它允许在不阻塞主线程的情况下写入输出流。