【问题标题】:Stream responses from gRPC service to REST client将 gRPC 服务的响应流式传输到 REST 客户端
【发布时间】:2020-01-31 01:19:51
【问题描述】:

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

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

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

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

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

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

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

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

更新

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

【问题讨论】:

  • 也许你会在这里找到一些提示 [baeldung.com/spring-rest-api-with-protocol-buffers],有一个来自 com.google.protobuf.protobuf-java 的 ProtobufHttpMessageConverter
  • @Marc 是的,我看到了 Baeldung 的文章并且能够应用他的一些技术。当我有一个简单的请求/响应时它可以工作,但我在尝试使用 gRPC“流”概念从服务器流回响应集合时遇到问题。
  • @Joseph 你有解决办法吗?

标签: java rest spring-boot grpc-java


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-01-19
    • 1970-01-01
    • 2020-07-22
    • 2021-05-14
    • 1970-01-01
    • 2023-03-02
    • 1970-01-01
    相关资源
    最近更新 更多