文章插图
gRPC 的基础知识前面跟小伙伴们分享了很多了,今天再写一篇给这个小小的系列收个尾 。
我们前面介绍的都是 gRPC 的基本用法,最终目的当然是希望能够在 Spring Boot 中用上这个东西,相信大部分小伙伴对于微服务的通信方案如 OpenFeign、Dubbo、消息驱动都有所了解,但是对于这三种方案之外的其他方案,可能听的多用的少,今天我们就来实践一下 gRPC 这种方案 。
顺便说一下我为什么会想到写 gRPC 教程呢,是因为之前我想给小伙伴们总结一下常见的各种微服务通信方案 。整理到 gRPC 的时候发现我还没写过 gRPC 相关的教程,因此就有了一个小系列 。
1. 依赖选择Spring Boot 整合 gRPC,官方其实并没有提供相应的依赖,不过目前有一个比较流行的第三方库可以使用:
- https://Github.com/yidongnan/grpc-spring-boot-starter
可能有小伙伴也会见到一些其他的第三方库,这个其实都可以,只要稳定可靠就行,本文就以上面这个库为例来和小伙伴们介绍 。
2. 准备工作这里我采用了 Nacos 来做服务注册中心,使用的 Nacos 版本是 2.0.2 这个版本 。Nacos 简单安装一下就行了,为了省事,数据持久化啥的可以先不配置 。也就是 Nacos 下载解压之后,直接执行如下命令单体运行就行了:
sh startup.sh -m standalone
这块没啥好说的,松哥在 vhr 系列里也有相关的视频教程,这里就不啰嗦了 。3. 代码实践【Spring Boot+Nacos+gRPC,一个区别于 OpenFeign 的微服务通信方案!】首先我们来看看我们的项目结构:
├─grpc-api│└─src│└─main│└─proto├─grpc-client│└─src│├─main││├─JAVA││└─resources│└─test└─grpc-server└─src├─main│├─java│└─resources└─test
首先有一个公共的模块 grpc-api,这个模块用来放我们的公共代码和依赖,包括 Protocol Buffers 文件也放在这里 。grpc-client 和 grpc-server 就不用多说了,分别是我们的客户端和服务端 。
3.1 grpc-apigrpc-api 中主要是处理 grpc 相关的事情,包括添加需要的依赖、插件等,编写 Protocol Buffers 文件等 。
我们先来看看该项目的 pom.xml 文件中的依赖:
<properties><maven.compiler.source>17</maven.compiler.source><maven.compiler.target>17</maven.compiler.target><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><protobuf.version>3.21.7</protobuf.version><protobuf-plugin.version>0.6.1</protobuf-plugin.version><grpc.version>1.52.1</grpc.version></properties><dependencies><dependency><groupId>io.grpc</groupId><artifactId>grpc-stub</artifactId><version>${grpc.version}</version></dependency><dependency><groupId>io.grpc</groupId><artifactId>grpc-protobuf</artifactId><version>${grpc.version}</version></dependency><dependency><!-- Java 9+ compatibility - Do NOT update to 2.0.0 --><groupId>jakarta.annotation</groupId><artifactId>jakarta.annotation-api</artifactId><version>1.3.5</version><optional>true</optional></dependency></dependencies><build><extensions><extension><groupId>kr.motd.maven</groupId><artifactId>os-maven-plugin</artifactId><version>1.7.0</version></extension></extensions><plugins><plugin><groupId>org.xolstice.maven.plugins</groupId><artifactId>protobuf-maven-plugin</artifactId><version>${protobuf-plugin.version}</version><configuration><protocArtifact>com.google.protobuf:protoc:${protobuf.version}:exe:${os.detected.classifier}</protocArtifact><pluginId>grpc-java</pluginId><pluginArtifact>io.grpc:protoc-gen-grpc-java:${grpc.version}:exe:${os.detected.classifier}</pluginArtifact></configuration><executions><execution><goals><goal>compile</goal><goal>compile-custom</goal></goals></execution></executions></plugin></plugins></build>
这块的依赖跟我们之前的 gRPC 文章中案例的依赖基本上都是一致的,没有区别,再来看看我们的 Protocol Buffers 文件:syntax = "proto3";option java_multiple_files = true;option java_package = "org.javaboy.grpc.api";option java_outer_classname = "LoginProto";import "google/protobuf/wrAppers.proto";package login;service HelloService{rpc sayHello(google.protobuf.StringValue) returns (google.protobuf.StringValue);}
推荐阅读
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 一个鸡蛋清的热量
- 一个水煮鸡蛋白的热量
- 景甜|怕景甜成为下一个阿娇或张柏芝?想啥呢!
- 李晨|李晨猎艳记:六任女友一个比一个漂亮,却没有一个走到最后
- |文玩人要有底线,要做到文玩“7不入”,做一个有底线的文玩人!
- 胡歌|大瓜!上海一刚结婚40岁中年男演员跟女老板有一个孩子,已上小学
- |张继科涉赌、范志毅被查、导演群殴,一个比一个生猛
- 李晨|李晨女友记:6任女友一个比一个漂亮,却没有一个走到最后
- 陈慧琳|杨幂晒午餐,一个人吃6道菜,吃一大碗白米饭体重依然保持90斤
- 主持人|亲手自毁前程的6位主持人,个个“自我作死”,没一个值得同情