在 Java 中使用 gRPC 和 ProtoBuf

本文介绍了如何在Java中使用Spring Boot和gRPC构建RPC服务器。首先,详细阐述了如何编写protobuf定义文件,接着展示了如何创建一个HelloWorld服务并实现服务器。最后,文章提及了编译和测试服务器的过程,以及对跨语言通信的优势进行了展望。
摘要由CSDN通过智能技术生成

        欢迎回到构建 Web 服务器系列。到目前为止,我们主要专注于在 GoLang 中编写 Web 服务器。但是,我收到了写一篇文章的请求,即如何使用 Java 完成 gRPC 实现以及实现相同目标的可用库和选项有哪些。

        先决条件:基本了解SpringSpring BootDependency InjectionRPC 和 ProtoBuf

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

编写 Java gRPC 服务器的步骤

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

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

1. 编写原型定义

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

语法 = "proto3";
选项 java_multiple_files = true;
包 com.test.grpc;

message HelloRequest {
string firstName = 1;
字符串姓氏 = 2;
}

message HelloResponse {
字符串问候 = 1;
}

service HelloService {
rpc hello(HelloRequest) 返回(HelloResponse);
}

         制作小号你下创建这个文件茜main目录,否则原文件将不包含在构建过程中。File Path: <project-root>/src/main/proto/HelloService.proto

接下来,将以下依赖项、扩展和插件添加到 pom.xml

<span style="background-color:#f2f2f2"><span style="color:rgba(0, 0, 0, 0.8)"><span style="color:#292929">// 将以下依赖项添加到依赖项部分。此依赖项可帮助您使用 io.grpc 模块开箱即用地运行基本的 GRPC 服务器。
<dependency> 
  <groupId>net.devh</groupId> 
  <artifactId>grpc-server-spring-boot-autoconfigure</artifactId> 
  <version>2.12.0.RELEASE</version> 
</dependency></span><span style="color:#292929">//将以下扩展添加到构建部分。此扩展在 protobuf 编译步骤期间添加了操作系统特定的逻辑。
<extensions> 
  <extension> 
    <groupId>kr.motd.maven</groupId> 
    <artifactId>os-maven-plugin</artifactId> 
    <version>${os-maven-plugin.version}</version> 
  </extension > 
</扩展></span><span style="color:#292929">// 将以下插件添加到构建部分。该插件编译 protobuf 文件并将其添加到目标文件夹中。
<plugin> 
  <groupId>org.xolstice.maven.plugins</groupId> 
  <artifactId>protobuf-maven-plugin</artifactId> 
  <version>${protobuf-maven-plugin.version}</version> 
  <configuration> 
    < protocArtifact> 
      com.google.protobuf: protoc :3.3.0:exe:${os.detected.classifier} 
    </protocArtifact> 
    <pluginId>grpc-java</pluginId> 
    <pluginArtifact> 
      io.grpc:protoc-gen-grpc -java:1.4.0:exe:${os.detected.classifier} 
    </pluginArtifact> 
  </configuration> 
  <executions>


        <goal>compile</goal> 
        <goal>compile-custom</goal> 
      </goals> 
    </execution> 
  </executions> 
</plugin></span><span style="color:#292929">// 将以下内容添加到属性部分
<protobuf-maven-plugin.version>0.6.1</protobuf-maven-plugin.version> 
<os-maven-plugin.version>1.6.1</os-maven-plugin.版本></span></span></span>

        对pom.xml文件进行更改后,运行mvn clean install以编译代码并从 protobuf 定义生成所需的样板 Java 代码。

2.你好世界服务器

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

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

@GrpcService
public class HelloServiceImpl extends HelloServiceImplBase {
@Override
public void hello(HelloRequest request, StreamObserver<HelloResponse> responseObserver) {
System. out .println("收到:" + request);

String greeting = new StringBuilder().append("Hello, ")
.append(request.getFirstName())
.append(" ")
.append(request.getLastName())
.toString();

HelloResponse 响应 = HelloResponse。newBuilder ()
.setGreeting(greeting ) .build
();
responseObserver.onNext(响应);
responseObserver.onCompleted();
}
}

        接下来,我们需要初始化服务器并注册我们的 gRPC 服务实现。将您的GrpcServerApplication.java文件修改为如下所示:

@SpringBootApplication
public class GrpcServerApplication {

public static void main(String[] args) throws IOException, InterruptedException {
Server server = ServerBuilder. forPort(8080)
.addService(新HelloServiceImpl())构建()。

系统。out .println("正在启动服务器...");
server.start();
系统。out .println("服务器启动了!");
server.awaitTermination();
}

}

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

3. 编译和测试

          到目前为止,我们使用 proto 定义在 Java 中创建了一个基本的 RPC 服务器实现,并将其注册到我们的服务器中。RPC 服务器创建的神奇之处在于net.devh我们在第一步中添加的依赖项。

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

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

        上面的命令启动一个 gRPC 服务器,可以使用多种工具(如yabgrpcurl )对其进行测试。

        在 Spring Boot 中使用 Java 完成服务器设置。在接下来的文章中,我们将通过消耗纺完客户端通过此服务器提供的数据。我们还将为此添加一个 GoLang 客户端,以了解基于 RPC 的通信如何在没有任何语言障碍的情况下跨多个服务更轻松、更高效。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值