使用 Spring Boot 的 gRPC 和 REST 微服务

Posted

技术标签:

【中文标题】使用 Spring Boot 的 gRPC 和 REST 微服务【英文标题】:Microservices with gRPC and REST using Spring Boot 【发布时间】:2017-09-10 16:20:47 【问题描述】:

对于一个项目,我想使用 Spring Boot 设置一个小型微服务场景,并使用一个 API 网关向客户端公开 REST 和 GraphQL、一个 Eureka 服务注册表和三个服务。由于性能原因,我希望 API 网关后面的所有服务都与 gRPC 通信,但同时仍公开一个额外的 REST API。是否有一种简洁的方法可以在相同的业务逻辑之上实现这两种类型的接口?网关如何将客户端的 HTTP 请求代理到 gRPC 请求?

【问题讨论】:

【参考方案1】:

您可以查看LogNet grpc-spring-boot-starter 了解如何将 gRPC 集成到 Spring Boot 中,它还有一个关于 Eureka 的部分。

根据 Eureka 示例,确保您不要为每个调用通过 gRPC 创建新连接。

根据 API 网关的实现,它还应该与 Eureka 通信,并通过 gRPC 以逻辑名称访问下游服务。

按照第二部分,只需在 Spring Services 中实现您的业务逻辑,并从与传输相关的抽象(控制器和 gRPC 服务)转发对它们的调用。

(可选)您可以更进一步,仅在 Protobuf 中定义所有消息。然后注册 Spring 的 Protobuf Converter for HTTP。

【讨论】:

以上是关于使用 Spring Boot 的 gRPC 和 REST 微服务的主要内容,如果未能解决你的问题,请参考以下文章

Istio 使用Spring Boot + GRPC构建部署微服务

Spring Boot+gRPC构建微服务并部署到Istio(详细教程)

Spring Boot+gRPC构建微服务并部署到Istio(详细教程)

java版gRPC实战之一:用proto生成代码

Spring Boot 学习总结(33)—— Spring Boot 3 的声明式 HTTP 调用

Spring Boot教程35——Spring Data JPA