SpringBoot整合gRPC踩坑回顾

简介: 本文回顾了作者在引入gRPC过程中遇到的挑战与解决方案。首先,由于SpringBoot 3.0暂不支持相关starter,导致初期预研不足,项目无法启动。接着,在编写代码时因对微服务架构理解不清,出现多个设计错误。最后,解决依赖冲突问题,特别是`protobuf-java-util`与现有依赖的冲突,通过Maven Helper插件有效排查并修复问题。此次经历加深了作者对微服务架构的理解,并为后续项目拆分打下基础。

引子

上周完结了自己入职以来的第一个预研任务,关于项目未来会全面拆分,又因为接口之间存在很多调用关系,因此在拆分服务后需要采用RPC调用,因此决定引入gRPC,也就诞生了这篇踩坑回顾文章。

一、SpringBoot3.0暂不支持(Ps:这里作为一年前踩坑的复盘,目前版本已支持)

当时需求提的是项目想升到SpringBoot3.0,因此对于版本这里我就没给予重视,满腔热血地打开Github,搜索了相关starter,然后引入到了项目中,光速仿写了个Demo,然后项目启动傻眼了,RPC服务没启动起来,一顿操作猛如虎,最后发现自己预研不够充分,官方文档贴出了版本对照表:https://yidongnan.github.io/grpc-spring-boot-starter/en/versions.html#version-2x
1.png

二、对于微服务项目架构理解不清楚

在解决完版本问题后,在编写代码时又闹出了很多乌龙,比如从Controler层开始gRPC服务端与客户端代码,写完才想到作为独立的服务它应当能接收来自外部的HTTP请求;把自己内部的服务也改造成gRPC相关的代码。这里会发生这些事情,我后来反思是我当时对微服务认识还不清晰的缘故,因为自己以前自己做项目也好,实习也好,接触到的都是单体架构的项目,微服务对我来说只是概念,但经过这次实操,也对它有了一个比较清晰的认识,于是自己简单梳理了一下项目以后全面拆分后的架构:
2.png

三、依赖冲突问题

在定义proto文件时需要定义时间类型TimeStamp,因此需要引入protobuf-java-util依赖,主要作用是proto与json互转,但是在接口层引入的proto相关的依赖会与它发生冲突,但是并不会显示提醒,在debug时执行到相应代码处则会提示类型转换失败,但其实控制台也会报NoSuchMethodException异常,但当时的我却忽视了这个,后来复现时发现了这个问题,于是在这里也记录下解决依赖冲突的小技巧:

通常情况下遇到以下三种异常就该检查依赖冲突了:NoSuchMethodExceptionClassNotFoundExceptionNoClassDefFoundException

先来看看什么是依赖冲突:
3.png

解决这个的方法通常是从A中排除掉M:

<dependency>
      <groupId>xxxx.xxx</groupId>
      <artifactId>A</artifactId>
      <version>1.0</version>
      <exclusions>
        <exclusion> 
          <groupId>xxxx.xxx</groupId>
          <artifactId>M</artifactId>
        </exclusion>
      </exclusions> 
  </dependency>

但是很多时候很难找到具体发生冲突的依赖,这时候就要推荐一个插件Maven Helper了,安装成功后,打开pom文件下方就多出了一个选项:
4.png
打开后就可以看到依赖冲突爆红以及具体的哪些依赖引用情况:
5.png
在需要排除的依赖上exclude就可以了:
6.png

目录
相关文章
|
9月前
|
JSON 负载均衡 Java
Springboot整合gRPC
Springboot整合gRPC
163 0
|
Dubbo Java 应用服务中间件
如何在Spring Boot项目中集成Dubbo并启用gRPC协议,来实现高效的分布式服务通信?
如何在Spring Boot项目中集成Dubbo并启用gRPC协议,来实现高效的分布式服务通信?
276 0
如何在Spring Boot项目中集成Dubbo并启用gRPC协议,来实现高效的分布式服务通信?
|
Kubernetes 前端开发 Dubbo
Spring Boot+gRPC构建微服务并部署到Istio(详细教程)
Spring Boot+gRPC构建微服务并部署到Istio(详细教程)
|
Dubbo Java 应用服务中间件
SpringBoot集成Dubbo启用gRPC协议
本文记录下SpringBoot集成Dubbo启用gRPC协议,以及与原生 gRPC 在代码编写过程中的区别。
272 0
|
Dubbo Java 应用服务中间件
Spring Boot+Nacos+gRPC,一个区别于 OpenFeign 的微服务通信方案!
Spring Boot+Nacos+gRPC,一个区别于 OpenFeign 的微服务通信方案!
|
JSON 自然语言处理 网络协议
【案例实战】SpringBoot整合GRPC微服务远程通信
【案例实战】SpringBoot整合GRPC微服务远程通信
【案例实战】SpringBoot整合GRPC微服务远程通信
|
SpringCloudAlibaba Kubernetes Java
Istio初体验:使用Spring Boot+gRPC构建微服务并部署
Istio初体验:使用Spring Boot+gRPC构建微服务并部署
676 0
|
25天前
|
JavaScript Java 测试技术
基于SpringBoot+Vue实现的留守儿童爱心网站设计与实现(计算机毕设项目实战+源码+文档)
博主是一位全网粉丝超过100万的CSDN特邀作者、博客专家,专注于Java、Python、PHP等技术领域。提供SpringBoot、Vue、HTML、Uniapp、PHP、Python、NodeJS、爬虫、数据可视化等技术服务,涵盖免费选题、功能设计、开题报告、论文辅导、答辩PPT等。系统采用SpringBoot后端框架和Vue前端框架,确保高效开发与良好用户体验。所有代码由博主亲自开发,并提供全程录音录屏讲解服务,保障学习效果。欢迎点赞、收藏、关注、评论,获取更多精品案例源码。
59 10
|
25天前
|
JavaScript Java 测试技术
基于SpringBoot+Vue实现的家政服务管理平台设计与实现(计算机毕设项目实战+源码+文档)
面向大学生毕业选题、开题、任务书、程序设计开发、论文辅导提供一站式服务。主要服务:程序设计开发、代码修改、成品部署、支持定制、论文辅导,助力毕设!
44 8
|
25天前
|
JavaScript 搜索推荐 Java
基于SpringBoot+Vue实现的家乡特色推荐系统设计与实现(源码+文档+部署)
面向大学生毕业选题、开题、任务书、程序设计开发、论文辅导提供一站式服务。主要服务:程序设计开发、代码修改、成品部署、支持定制、论文辅导,助力毕设!
55 8