java - 如何在 spring-boot 中管理 gRPC 服务器通道
问题描述
我有一个包含 spring-boot 应用程序和 gRPC 服务器的设置。gRPC 服务器使用 NodeJS 编写并部署在单独的服务器中。在我的 spring-boot 应用程序中,有一个端点接受请求对象并将其委托给 gRPC 服务器。
问题:
1)在这种情况下,我是否需要为每个传入的 http 请求创建 rGPC 通道?(这听起来效率不高)
2) 还是我在 spring-boot 应用程序初始化时创建了一个通道?
2)方案中,当gRPC服务器宕机,需要从eureka服务器获取新的URI时,如何管理?
解决方案
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)。
推荐阅读
- python - Python 从 S3 下载/压缩文件:ECS Fargate 达到存储限制
- php - PHP 读取文件 - 未完成
- hadoop - HDFS + 无法将文件从 HDFS 复制到本地文件夹
- scala - 如何为某些依赖项指定不同的解析器
- swift - Swift 5 isEmoji 方法为数字返回 true?
- unix - 如何从 curl 输出中查找最新版本信息
- javascript - 自定义画廊 Gutenberg 块中的空图像数组
- kubernetes - 为什么创建 kubernetes 集群后 /var/lib/cni/networks 为空?
- spring - 防止数据在重试失败调用时持续存在 - Spring Retry
- android - Xamarin 形成日期选择器绑定日期并在日期更改时执行某些操作