gRPC-Java 实现提供的扩展工具有助于根据域逻辑和服务器存根生成用户需要实现的服务接口 , 客户端将使用这些存根调用已部署的服务 。
标准服务器和客户端gRPC-Java 库提供了一个响应式服务器实现(基于 Netty)来部署您的服务和一个阻塞/非阻塞客户端实现来连接您的服务和其他服务 。
您需要注册您的服务实现并以编程方式启动服务器 。
在此处找到 GitHub 参考 。
要连接到部署在基于 Netty 的 gRPC 服务器上的服务 , 您需要创建一个消息通道并将其与生成的服务器存根连接以进行调用 。
在此处找到 GitHub 参考 。
网络客户端还有一个 gRPC Web 模块 , 允许 Web 客户端无缝访问您的 gRPC 服务 。 他们的早期版本支持通过反向代理连接 Web 客户端 , 但现在可以在没有中间代理的情况下进行 。
另一种方法是使用 REST/GraphQL 协议将包装服务层暴露给面向外部的世界 , 并通过 gRPC 客户端连接 。
数据映射和持久性我们可能需要在其之上添加另一层 , 以使用 Hibernate 等数据访问库创建功能齐全的域服务 。 与 Hibernate 或任何数据库一样 , 需要以某种方式修饰所需的实体 , 而这对于 protobuf 模型生成的模型可能不可行 。 因此 , 我们可能需要一些映射逻辑来将模型类转换为实体类 。 一个这样好的库是 MapStruct , 它基于 bean 约定进行自动映射 。 我们只需要提供映射接口:
第三方支持为了进一步简化整个构建和运行环境 , 有一些流行的第三方 Maven 插件和库也有帮助 。
1. 运行与 Build 集成的 Proto Tool协议缓冲区 Maven 插件(由 Xolstice 提供)运行 proto 工具及其扩展 , 以及从*.proto文件构建和生成源代码 。 它还附加了 .proto*文件作为项目的资源 。 请参阅示例配置以生成 Java 代码 。
参考可以在这里找到 。
2. 生成映射器类MapStruct 库支持生成消息类型的映射器类 , 这些映射器类可以将消息从/到类的实体 。 它提供了一个注解处理器 , 通过在构建时分析指定的注解来生成一个映射器类 。 Maven编译插件参考下面的配置 。
3.自动启动gRPC服务器并注册服务实现默认情况下 , gRPC 服务器不会与 web 服务器(在本例中为 Netty)一起启动 。 此外 , 它需要在服务器启动之前注册所有 gRPC 服务 。 LogNet 的 gRPC Spring Boot 会自动扫描所有带有@GRpcService注解的类 , 并向服务器构建器注册服务定义 。 构建服务器后 , 它会在 Spring 应用程序属性中配置的端口上自动启动 gRPC 服务器 。
除了注册服务和启动服务器外 , 它还支持自动配置的安全、健康检查和服务发现 。 有关详细信息 , 请参阅此处 。
GitHub 上提供了上述方法的完整示例实现 。
差异化
- 谷歌构建 gRPC 是出于从零开始构建大规模微服务的学习需求 。 大多数流行的微服务框架仍然缺乏对性能和跨平台支持的要求 , 因为没有大型系统可以在单个堆栈和单个编码中构建 。
- 最受欢迎的是对 HTTP/2 的支持 , 它仍然是许多提供商的路线图 。 它为在单个 TCP 连接上使用多路复用非阻塞数据流的二进制线路传输提供了优势 。 进一步支持标头压缩 , 它提供了额外的性能优势 。
- One|基于Android 13打造:三星Galaxy S22抢先用上One UI 5.0
- 客户端|多平台分析618数据,看清家居人未来方向!
- 客户端|雷军下军令状?不调好绝不发布,小米12 Ultra稳了
- 英伟达|NVIDIA Triton 推理引擎公开课上新:基于多实例 GPU 和 K8s 的大规模 CV 模型部署实践
- 苹果|澳大利亚成功制造了可控光流组件,基于光的通信设施将迎来革新
- 致远互联|跨时空协作的利器——基于生命周期管理的基础设施BIM平台
- 客户端|2022年06月21日《区块链每日必知》微信或首次以“涉数字藏品二级交易”理由封禁一公众号
- 基于深度学习的点云分割网络及点云分割数据集
- 客户端|卡贴机价格暴跌,正是入手好时机!粉丝买卡贴iPhone13Pro仅4700!
- OPPO|杀后台问题有救了!OPPO新系统曝光:基于Android 13
