如何在春季靴子上使用grpc

时间:2019-04-23 12:09:17

标签: spring-boot grpc

我是grpc的新手,我不知道如何在Spring Boot中使用它,但是使用下面的链接

  1. https://github.com/saturnism/grpc-java-by-example/tree/master/simple-grpc-server

  2. https://github.com/saturnism/grpc-java-by-example/tree/master/simple-grpc-client

注意*:-第一个用于服务器项目,第二个用于客户端项目。

我已经用spring boot在grpc上创建了一个项目,但是我无法理解这一点,在grpc客户端项目中,我如何在grpc服务器项目中使用protobuf生成的类。因为它没有在grpc客户端项目中创建任何原始文件,那么我该如何在grpc客户端项目中使用grpc服务器项目的类,或者我们可以为grpc服务器和客户端创建一个项目,而不是为两者创建不同的项目。

关于这个问题,我有两个要问的问题:- 1.如何在另一个项目中使用protobuf编译器生成的grpc类,例如,如果客户端和服务器是两个不同的项目,并且只有服务器具有proto生成的文件,并且客户端要使用相同的类。

  1. 我如何在一个项目中创建所有这些东西,这意味着客户端和服务器在一个项目中,然后如何逐步演示如何运行该项目。

3 个答案:

答案 0 :(得分:0)

有两种方法可以做到这一点:

  1. 在两个项目之间复制.proto文件,并让每个文件生成自己的生成代码副本。这可能是最简单的,并且可以避免将生成的代码检入源代码管理。这种方法的缺点是,.proto文件可能会过时,如果您修改其中一个而不是另一个。

  2. .proto保留在客户端和服务器的同一存储库中,并使两者都依赖于所生成的代码。这允许同时为客户端和服务器修改原型,但是要求代码驻留在同一存储库中(有时称为“ Monorepo”方法)。缺点是客户端和服务器存储库可能太大,需要拆分。

Google(Protobuf的作者)通常使用选项#2,但是Protobuf的许多用户更喜欢选项1。我强烈建议每次都重新生成类,而不检查生成的代码。 Protobuf类的ABI可能会偶尔更改,并且您将失去Protobuf的向后兼容性。

答案 1 :(得分:0)

我创建了一个示例 spring boot grpc 应用程序并在此处发布 https://javabelazy.blogspot.com/

  1. 在你的 pom 中使用依赖 net.devh.grpc-server-spring-boot-starter

  2. 创建原型文件(示例服务代码)

服务乒乓服务{ rpc ping(PingRequest) 返回 (PongResponse) {

option (google.api.http) = { get: "/v1/grpc/{ping}" };
}
  1. 使用 io.grpc:protoc-gen-grpc-java:1.30.0:exe 为 proto 文件生成存根

  2. 使用 nettyserver

  3. 在应用程序属性中将端口设置为 9090(默认)grpc.server.port=9090

答案 2 :(得分:0)

我最近使用了 https://github.com/yidongnan/grpc-spring-boot-starter。使用此库,您将获得大部分 spring 功能以及 grpc。