本文是构建网络服务器系列的一部分
欢迎回到构建网络服务器系列。到目前为止,我们主要关注的是用GoLang编写网络服务器。然而,我收到了写一篇关于如何使用Java实现gRPC的请求,以及有哪些可用的库和选项来实现同样的目标。
前提是对Spring、Spring Boot、依赖注入、RPC和ProtoBuf的基本了解。
我们将使用Spring Boot来初始化一个基本的服务,然后在上面添加一个RPC服务器和客户端。
写一个Java gRPC服务器的步骤
假设我们已经从springinitlizr网站上生成了一个代码,项目名称为grpc-server
- 我们定义服务的protobuf文件,并在pom.xml中添加所需的依赖项,以编译proto文件,并作为构建过程的一部分生成RPC Java接口。
- 接下来我们继续编写一个基本的HelloWorld服务器。
- 编译代码并调用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服务器,可以使用多种工具如yab和grpcurl进行测试。
至此,在Spring boot中使用Java的服务器设置已经完成。在下一篇文章中,我们将通过启动一个客户端来消费这个服务器所提供的数据。我们还将为其添加一个GoLang客户端,看看基于RPC的通信是如何在没有任何语言障碍的情况下更容易、更有效地跨越多个服务。
编码趣事" 根据许多在线研究,最不喜欢的编程语言是Perl、Delphi和VBA。
要求" 请在评论中加入你的宝贵意见。这将真正帮助我提高内容的质量,使其符合您的期望。
在Java中使用gRPC和ProtoBuf最初发表在Medium上的CodeX,人们通过强调和回应这个故事来继续对话。