提问者:小点点

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


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

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

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

我已经能够让一个基本的请求/响应模式从端到端工作,但不确定如何实现涉及流的模式(在任何方向)。事实上,这并不完全正确——我已经能够让gRPC站点(https://grpc.io/)上提供的基本示例工作。

这是我正在努力做的一个例子,我似乎不知道如何工作:

“域”服务能够将对象集合(即流源)返回给请求者。域使用gRPC逻辑将这些对象提供给调用客户端(本例中为“网关”)。外部客户端对网关服务进行REST调用,以请求域服务提供的对象集合。

据我所知,域和网关之间的通信很好,但在尝试将信息发送回外部客户端时出现了问题。有关代码和我遇到的错误的具体详细信息,请参阅将gRPC服务的响应流返回到RESTful客户端的相关问题。

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

更新:

我已经对上面提到的同伴进行了更新。


共1个答案

匿名用户

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