首页 > 解决方案 > 如何在 spring-boot 中管理 gRPC 服务器通道

问题描述

我有一个包含 spring-boot 应用程序和 gRPC 服务器的设置。gRPC 服务器使用 NodeJS 编写并部署在单独的服务器中。在我的 spring-boot 应用程序中,有一个端点接受请求对象并将其委托给 gRPC 服务器。

问题:

1)在这种情况下,我是否需要为每个传入的 http 请求创建 rGPC 通道?(这听起来效率不高)

2) 还是我在 spring-boot 应用程序初始化时创建了一个通道?

2)方案中,当gRPC服务器宕机,需要从eureka服务器获取新的URI时,如何管理?

这是spring-boot 中的 gRPC 通道创建

标签: javaspring-bootmicroservicesgrpc-java

解决方案


2)是要走的路。为了解决服务器宕机的情况,您可以在将传入的 http 请求转发到 gRPC 服务器之前检查通道状态 ( io.grpc.ManagedChannel.getState(boolean)),如果不是,则在适当地重构它READY之后调用您的initCommunicationChannel(),以便可以多次调用它。

或者,您可以实现一个名称解析器插件(https://github.com/grpc/grpc/blob/master/doc/naming.md),它只需调用eurekaClient.getApplication("logger-app").getInstances()返回解析的地址,然后由客户端负载平衡策略使用(https://github.com/grpc/grpc/blob/master/doc/load-balancing.md)。


推荐阅读