首页 > 解决方案 > 将 gRPC 服务的响应流式传输到 REST 客户端

问题描述

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

使用图

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

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

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

这是我正在尝试做的一个例子,我似乎无法弄清楚如何工作:

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

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

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

更新

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

标签: javarestspring-bootgrpc-java

解决方案


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


推荐阅读