客户端|基于GRPC搭建高性能/跨平台微服务框架?( 二 )

  • 流式 RPC — 在这种形式中 , 客户端一次性发送数据 , 但服务器以流的形式返回响应 。
  • 客户端流式 RPC — 与服务器流式传输不同 , 在这种形式中 , 客户端以流的形式发送请求的数据 , 服务器将数据作为一个整体返回 。
  • 双向流式 RPC — 在这种形式中 , 服务器和客户端都支持根据请求和响应流式传输数据 。

  • 具有标准 CRUD 操作的消息类型的示例服务定义将采用以下输入:

    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 上提供了上述方法的完整示例实现 。
    差异化