我是grpc的新手,我不知道如何在Spring Boot中使用它,但是使用下面的链接
https://github.com/saturnism/grpc-java-by-example/tree/master/simple-grpc-server
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生成的文件,并且客户端要使用相同的类。
答案 0 :(得分:0)
有两种方法可以做到这一点:
在两个项目之间复制.proto
文件,并让每个文件生成自己的生成代码副本。这可能是最简单的,并且可以避免将生成的代码检入源代码管理。这种方法的缺点是,.proto
文件可能会过时,如果您修改其中一个而不是另一个。
将.proto
保留在客户端和服务器的同一存储库中,并使两者都依赖于所生成的代码。这允许同时为客户端和服务器修改原型,但是要求代码驻留在同一存储库中(有时称为“ Monorepo”方法)。缺点是客户端和服务器存储库可能太大,需要拆分。
Google(Protobuf的作者)通常使用选项#2,但是Protobuf的许多用户更喜欢选项1。我强烈建议每次都重新生成类,而不检查生成的代码。 Protobuf类的ABI可能会偶尔更改,并且您将失去Protobuf的向后兼容性。
答案 1 :(得分:0)
我创建了一个示例 spring boot grpc 应用程序并在此处发布 https://javabelazy.blogspot.com/
在你的 pom 中使用依赖 net.devh.grpc-server-spring-boot-starter
创建原型文件(示例服务代码)
服务乒乓服务{ rpc ping(PingRequest) 返回 (PongResponse) {
option (google.api.http) = { get: "/v1/grpc/{ping}" };
}
使用 io.grpc:protoc-gen-grpc-java:1.30.0:exe 为 proto 文件生成存根
使用 nettyserver
在应用程序属性中将端口设置为 9090(默认)grpc.server.port=9090
答案 2 :(得分:0)
我最近使用了 https://github.com/yidongnan/grpc-spring-boot-starter。使用此库,您将获得大部分 spring 功能以及 grpc。