Springboot集成GRPC

Springboot集成GRPC

  • 一、springboot版本
  • 二、GRPC的pom依赖
    • 2.1 服务端
    • 2.2 客户端
    • 3.构建依赖
  • 三、配置文件
    • 服务端
    • 客户端
  • 四、 demo
    • 4.1 编写proto文件
    • 4.2 生成文件
    • 4.3 服务端重写方法
    • 4.4 客户端调用该方法
  • 五、测试

一、springboot版本

        <groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.1.3.RELEASE</version>

二、GRPC的pom依赖

2.1 服务端

        <grpc.version>1.51.0</grpc.version><dependencies><!-- gRPC 依赖 --><dependency><groupId>io.grpc</groupId><artifactId>grpc-netty-shaded</artifactId><version>${grpc.version}</version></dependency><dependency><groupId>io.grpc</groupId><artifactId>grpc-core</artifactId><version>${grpc.version}</version></dependency><dependency><groupId>io.grpc</groupId><artifactId>grpc-api</artifactId><version>${grpc.version}</version></dependency><dependency><groupId>io.grpc</groupId><artifactId>grpc-protobuf</artifactId><version>${grpc.version}</version></dependency><dependency><groupId>io.grpc</groupId><artifactId>grpc-stub</artifactId><version>${grpc.version}</version></dependency><dependency><groupId>net.devh</groupId><artifactId>grpc-server-spring-boot-starter</artifactId><version>2.14.0.RELEASE</version></dependency><dependency><groupId>com.google.protobuf</groupId><artifactId>protobuf-bom</artifactId><version>3.21.9</version><type>pom</type></dependency><dependency><groupId>com.google.protobuf</groupId><artifactId>protobuf-java</artifactId><version>3.21.9</version></dependency><!-- https://mvnrepository.com/artifact/com.google.protobuf/protoc --><dependency><groupId>com.google.protobuf</groupId><artifactId>protoc</artifactId><version>3.21.9</version><type>pom</type></dependency></dependencies>

2.2 客户端

        <grpc.version>1.51.0</grpc.version><dependencies><!-- gRPC 依赖 --><dependency><groupId>io.grpc</groupId><artifactId>grpc-netty-shaded</artifactId><version>${grpc.version}</version></dependency><dependency><groupId>io.grpc</groupId><artifactId>grpc-core</artifactId><version>${grpc.version}</version></dependency><dependency><groupId>io.grpc</groupId><artifactId>grpc-api</artifactId><version>${grpc.version}</version></dependency><dependency><groupId>io.grpc</groupId><artifactId>grpc-protobuf</artifactId><version>${grpc.version}</version></dependency><dependency><groupId>io.grpc</groupId><artifactId>grpc-stub</artifactId><version>${grpc.version}</version></dependency><!-- grpc 客户端 --><dependency><groupId>net.devh</groupId><artifactId>grpc-client-spring-boot-starter</artifactId><version>2.14.0.RELEASE</version></dependency><dependency><groupId>com.google.protobuf</groupId><artifactId>protobuf-bom</artifactId><version>3.21.9</version><type>pom</type></dependency><dependency><groupId>com.google.protobuf</groupId><artifactId>protobuf-java</artifactId><version>3.21.9</version></dependency><!-- https://mvnrepository.com/artifact/com.google.protobuf/protoc --><dependency><groupId>com.google.protobuf</groupId><artifactId>protoc</artifactId><version>3.21.9</version><type>pom</type></dependency></dependencies>

3.构建依赖

 <build><!--grpc proto文件编译插件--><extensions><extension><groupId>kr.motd.maven</groupId><artifactId>os-maven-plugin</artifactId><version>1.6.2</version></extension></extensions><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin><!--grpc proto文件编译插件--><plugin><groupId>org.xolstice.maven.plugins</groupId><artifactId>protobuf-maven-plugin</artifactId><version>0.6.1</version><configuration><!-- 设置 protoc 的版本 --><protocArtifact>com.google.protobuf:protoc:3.12.0:exe:${os.detected.classifier}</protocArtifact><!-- 设置插件的版本 --><pluginId>grpc-java</pluginId><pluginArtifact>io.grpc:protoc-gen-grpc-java:1.34.1:exe:${os.detected.classifier}</pluginArtifact><!-- 设置输出目录 --><outputDirectory>${project.basedir}/src/main/java</outputDirectory><!-- 设置proto文件所在目录 --><protoSourceRoot>${project.basedir}/src/main/resources</protoSourceRoot><!-- 是否清除输出目录 --><clearOutputDirectory>false</clearOutputDirectory></configuration><executions><execution><goals><!-- 执行 protobuf 编译和 gRPC 插件 --><goal>compile</goal><goal>compile-custom</goal></goals></execution></executions></plugin></plugins></build>

三、配置文件

服务端

  1. 配置grpc的端口号即可,不配默认端口号是9090.
    在这里插入图片描述

客户端

yaml配置:

# grpc配置
grpc:# grpc clienT相关配置client:# 服务名(不同服务名可对应不同配置)# ms-zeu是服务端配置的名字,GrpcClient注解会用到ms-zeus:#       gRPC服务端地址#      address: 'dns://127.0.0.1:19898'address: 'static://127.0.0.1:19090'# 是否开启保持连接(长连接)enableKeepAlive: true# 保持连接时长(默认20s)keepAliveTimeout: 20s# 没有RPC调用时是否保持连接(默认false,可禁用避免额外消耗CPU)keepAliveWithoutCalls: false# 客户端负载均衡策略(round_robin(默认), pick_first)defaultLoadBalancingPolicy: round_robin# 通信类型# plaintext | plaintext_upgrade | tls# 明文通信且http/2 | 明文通信且升级http/1.1为http/2 | 使用TLS(ALPN/NPN)通信negotiationType: plaintext

如下图所示:
在这里插入图片描述

四、 demo

4.1 编写proto文件

eg:

// proto 文件放在 src/main/proto 目录下
// 指定使用 proto3 语法
syntax = "proto3";option java_generic_services = true;
// 生成的 Java 代码将被拆分为多个文件
option java_multiple_files = true;
// 指定生成的 Java 代码所在的包
option java_package = "cn.zqm.api";// 定义接口
service Greeter {// 定义方法rpc SayHello (HelloRequest) returns (HelloReply) {}
}// 定义入参格式
message HelloRequest {string name = 1;
}// 定义出参格式
message HelloReply {string data;string message = 1;int32 code; 
}

proto3语法详情见:

4.2 生成文件

点击api中的compile,自动生成右侧的jar包。
客户端和服务端同时生成。
在这里插入图片描述

4.3 服务端重写方法

@Service
public class HelloService {//和本项目中配置文件名一致即可@GrpcClient("ms-zeus")private GreeterGrpc.GreeterBlockingStub simpleStub;public void testHello(){HelloRequest helloRequest = HelloRequest.newBuilder().setName("1").build();HelloReply helloReply = simpleStub.sayHello(helloRequest);System.out.println();}
}

在这里插入图片描述

4.4 客户端调用该方法

@Service
public class HelloService {//和本项目中配置文件名一致即可@GrpcClient("ms-zeus")private GreeterGrpc.GreeterBlockingStub simpleStub;public void testHello(){HelloRequest helloRequest = HelloRequest.newBuilder().setName("1").build();HelloReply helloReply = simpleStub.sayHello(helloRequest);System.out.println();}
}

在这里插入图片描述

五、测试

编写http接口进行测试:
在这里插入图片描述

结果应该是我们自定义生成的hello。

在这里插入图片描述

验证成功!!!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/16014.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

pycharm找不到conda可执行文件解决办法

解决办法 1、第一种 按照以下步骤&#xff0c;找到condabin文件下面&#xff0c;conda.bat 文件&#xff0c;把路径给复制下来&#xff0c;粘贴到 Conda 可执行文件&#xff0c;即可。 然后再点击加载环境&#xff0c;我这里是已经汉化了 pycharm &#xff0c;如何汉化&…

Linux - 用户管理

1 基本介绍 Linux系统是一个多用户多任务的操作系统&#xff0c;任何一个要使用系统资源的用户&#xff0c;都必须先向系统管理员申请一个账号&#xff0c;然后以这个账号的身份进入系统 2 添加用户 基本语法 //添加用户 useradd 用户名 实列(root权限下) useradd huchen…

Less语法

一:less作用 是CSS的预处理器,扩充了CSS语言,使CSS具有一定逻辑性、计算功能;通了less语法,生成.CSS文件; 二:具体使用规则 1 less变量设置属性值 语法规范: @变量名:属性值名;CSS属性:@变量名;eg:给box盒子添加粉色背景 @bgcolor:purple; .box{background-col…

C++——list的实现以及源码

前言&#xff1a; 最近学习了clist的实现&#xff0c;这让我对迭代器的理解又上升了一个新的高度&#xff0c;注意&#xff1a;代码里的list是放在一个叫zgw的命名空间里边&#xff0c;但是在实现list的代码中没有加namespace&#xff0c;这里给个注意&#xff0c;以后复习时能…

解密论文评审过程:SCI论文是匿名送审的吗?

我是娜姐 迪娜学姐 &#xff0c;一个SCI医学期刊编辑&#xff0c;探索用AI工具提效论文写作和发表。 前几天有位学员问我&#xff0c;审稿人能看见我论文的作者和单位信息吗&#xff1f;应该是双方都匿名才更公平啊。 同行评议&#xff0c;在不同的期刊操作还真不一样。有双方…

spring学习笔记一

前言&#xff08;第一性原理&#xff09; 那么spring解决问题&#xff1a;JAVA开发框架&#xff0c;spring是用来解决企业级Java应用开发的问题。 通过依赖注入和面向切面编程来灵活管理和配置代码&#xff0c;提供一套工具来帮助开发和配置代码&#xff0c;提供了声明式事务…

AI重塑保险业未来:机器学习在风险评估、欺诈检测与客户服务中的深度应用

&#x1f9d1; 博主简介&#xff1a;阿里巴巴嵌入式技术专家&#xff0c;深耕嵌入式人工智能领域&#xff0c;具备多年的嵌入式硬件产品研发管理经验。 &#x1f4d2; 博客介绍&#xff1a;分享嵌入式开发领域的相关知识、经验、思考和感悟&#xff0c;欢迎关注。提供嵌入式方向…

linux笔记6--shell相关

文章目录 1. 查看当前的shell类型2. ps -f命令3. 父子shell4. 分号在命令里的作用问题&#xff1a;环境变量echo&#xff1a; 5. sleep和jobssleep:jobs:例子&#xff1a;&: 6. 外部命令和内建命令图解外部命令type命令 7. history命令8. alias命令9. 推荐 1. 查看当前的sh…

Midjourney Describe API 使用文档

Midjourney Describe API 使用文档 Midjourney Describe API 的主要功能是通过上传图片&#xff0c;获取对图片的描述。使用该 API&#xff0c;只需要传递图片文件&#xff0c;API 会返回图片的详细描述。无需繁琐的参数设置&#xff0c;即可获得高质量的图片描述。 支持多种图…

银企直连业务

项目背景 不同银行的银企直连没有统一的标准&#xff0c;相同的输入输出。因此&#xff0c;用户需要根据每家银行提供的技术文档定制化地完成调用、获取数据。银企直连就是为了解决这些难题。引入银企直连后&#xff0c;企业的业务系统可与各家银行对接&#xff0c;实现标准化…

StarRocks与ClickHouse:简要快速选型对比

1. 引言 在大数据分析领域&#xff0c;高性能的数据库系统是关键。StarRocks和ClickHouse作为列式存储数据库的代表&#xff0c;各自具有独特的优势。本文将深入探讨它们的特性和适用场景&#xff0c;为选择合适的数据库系统提供参考。 2. StarRocks与ClickHouse简介 2.1 St…

华为机考入门python3--(30)牛客30-字符串合并处理

分类&#xff1a;字符串、进制转换 知识点&#xff1a; 获取偶数下标的字符 even_chars my_str[::2] 获取奇数下标的字符 odd_chars my_str[1::2]) 翻转字符串 reversed_str my_str[::-1] 二进制转十进制 num int(reversed_binary, 2) 十进制转十六进制 …

JDBC使用QreryRunner简化SQL查询注意事项

QreryRunner是Dbutils的核心类之一&#xff0c;它显著的简化了SQL查询&#xff0c;并与ResultSetHandler协同工作将使编码量大为减少。 注意事项 1. 使用QreryRunner必须保证实体类的变量名&#xff0c;和sql语句中要查找的字段名必须相同&#xff0c;否则查询 不到数据,会出…

Oracle中创建子查询临时表

1. 创建子查询临时表&#xff0c;当前会话中可以查询到&#xff0c;创建临时表需要指定表空间&#xff0c;不然会使用默认的表空间。 CREATE TABLE temp_table TABLESPACE tablespace_name AS SELECT id, number, count(1) AS total FROM example_table GROUP BY id, number…

Dubbo生态之nacos

1.Nacos简介 在博客Dubbo生态之初识dubbo协议-CSDN博客种我们已经介绍了为什么要使用注册中心&#xff0c;nacos作为注册中心的一种&#xff0c;相对于其它的主流注册中心有什么区别呢? NacosEurekaZookeeper数据存储存储在内存存储在内存存储在内存通信协议gRPChttpjute协议…

R实验 非参数性检验(二)

实验目的&#xff1a; 了解符号检验&#xff0c;掌握Wilcoxon符号秩检验&#xff0c;Wilcoxon秩和检验&#xff1b; 掌握Pearson拟合优度c2检验&#xff0c;Shapiro-Wilk 正态性检验&#xff0c;了解Kolmogorov-Smirnov单样本和双样本检验&#xff09;&#xff1b; 实验内容&…

06. Redis 主从复制

文章目录 概念主从复制主从复制的作用 环境配置总结复制原理 宕机后手动配置主机 概念 主从复制 是指将一台 Redis 服务器的数据复制到其他的 Redis 服务器&#xff1a; 前者称为主节点&#xff08;master/leader&#xff09;&#xff0c;后者成为从节点&#xff08;slave/f…

[数组查找]1.图解线性查找及其代码实现

线性查找 线性查找是一种在数组中查找数据的算法。与二分查找不同&#xff0c;即便数据没有按顺序存储&#xff0c;也可以应用线性查找。线性查找的操作很简单&#xff0c;只要在数组中从头开始依次往下查找即可。虽然存储的数据类型没有限制&#xff0c;但为了便于理解&#x…

windows 下nginx常用命令

1、启动&#xff0c;目录cmd&#xff0c;后 start nginx.exe 2.重新加载 nginx -s reload 3.查看状态 tasklist /fi “imagename eq nginx.exe” 4.关闭 nginx -s quit