在Java中使用gRPC和ProtoBuf教程

490 阅读3分钟

本文是构建网络服务器系列的一部分

欢迎回到构建网络服务器系列。到目前为止,我们主要关注的是用GoLang编写网络服务器。然而,我收到了写一篇关于如何使用Java实现gRPC的请求,以及有哪些可用的库和选项来实现同样的目标。

前提是对SpringSpring Boot依赖注入RPC和ProtoBuf的基本了解。

我们将使用Spring Boot来初始化一个基本的服务,然后在上面添加一个RPC服务器和客户端。

写一个Java gRPC服务器的步骤

假设我们已经从springinitlizr网站上生成了一个代码,项目名称为grpc-server

  1. 我们定义服务的protobuf文件,并在pom.xml中添加所需的依赖项,以编译proto文件,并作为构建过程的一部分生成RPC Java接口。
  2. 接下来我们继续编写一个基本的HelloWorld服务器。
  3. 编译代码并调用RPC服务器来测试。

1.编写Proto定义

Protobuf定义是与语言无关的,因此不会在所有可用的选项中改变。对于这个服务器例子,我们将编写一个非常基本的HelloWorld服务,如下所示。

syntax = "proto3";

请确保你在主目录下创建了这个文件,否则proto文件将不会被包含在构建过程中。文件路径:/src/main/proto/HelloService.proto

接下来,在pom.xml中添加以下依赖性、扩展和插件

// add the following dependency to dependencies section. This dependency helps you to run a basic GRPC server out of the box by using the io.grpc module.
//add the following extension to build section. This extension adds OS specific logic during the protobuf compilation step.
// add the following plugin to the build section. This plugin compiles the protobuf files and adds it to the target folder.
// add the following to properties section

对pom.xml文件进行修改后,运行mvn clean install来编译代码,并从protobuf定义中生成所需的模板java代码。

2.Hello World服务器

一旦我们弄清了protobuf的构建和编译步骤,设置服务器就是一项相对容易的任务。

让我们通过实现`com*.test.grpc.HelloServiceGrpc.HelloServiceImplBase`*的基类来创建一个基本的java gRPC服务器,这个基类是作为proto编译步骤的一部分生成的。

@GrpcService

接下来,我们需要初始化服务器并注册我们的gRPC服务实现。修改你的GrpcServerApplication.java文件,看起来像这样:

@SpringBootApplication

在上述文件中,我们在8080端口创建了一个新的gRPC服务器,并在此注册了我们的HelloServiceImpl。

3.编译和测试

到目前为止,我们使用proto定义在Java中创建了一个基本的RPC服务器实现,并将其注册到我们的服务器中。创建RPC服务器的魔法是由我们在第一步中添加的net.devh依赖关系处理的。

现在,继续运行服务器并测试它为请求服务。

编译和运行:mvn spring-boot:run

上述命令启动了一个gRPC服务器,可以使用多种工具如yabgrpcurl进行测试。

至此,在Spring boot中使用Java的服务器设置已经完成。在下一篇文章中,我们将通过启动一个客户端来消费这个服务器所提供的数据。我们还将为其添加一个GoLang客户端,看看基于RPC的通信是如何在没有任何语言障碍的情况下更容易、更有效地跨越多个服务。

编码趣事" 根据许多在线研究,最不喜欢的编程语言是Perl、Delphi和VBA。

要求" 请在评论中加入你的宝贵意见。这将真正帮助我提高内容的质量,使其符合您的期望。


在Java中使用gRPC和ProtoBuf最初发表在Medium上的CodeX,人们通过强调和回应这个故事来继续对话。