当前位置: 首页 > java >正文

若依4.7.8(springboot2.5.15)升级到4.8.1(springboot3.3.5)并集成Dubbo3客户端

背景

为了集成Dubbo3需要将若依4.7.8(springboot2.5.15)升级到4.8.1(springboot3.3.5)

jdk8升到jdk17

环境介绍

- 若依4.8.1(从4.7.8升级而来)RuoYi 若依官方网站

- SpringBoot 3.3.5   官方地址:SpringBoot 3.3.5

- Nacos 2.4.3   官方下载地址:Nacos 2.4.3 

- Dubbo 3.3.2 https://cn.dubbo.apache.org    (普通网络可能访问受限)

- Open JDK17  下载地址:Open JDK17 (原工程为jdk8)

- 本环境与作者另一篇文章的dubbo服务端对应(springboot2+nacos注册中心提供dubbo服务)

待完善(补充关联文章链接),作者之前还有一篇dubbo3客户端文章,但这篇偏讲RuoYi升级

 模块结构

项目保持了官方模块结构,自定义功能在两新加模块中开发(方便升级维护),本文的dubbo3客户端就在alarm-webhook模块中

升级过程

1、取RuoYi4.8.1(springboot3版本)覆盖现有代码

2、升级idea工程编译环境jdk 8 升到17

3、提交时进行代码比对:如果是自研做过调整的取原来的,如果是官方升级差异就取新的(靠肉眼,文件不过,很快的,前多前台文件可以跳过)

POM代码

若依新模块的pom文件

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.****.***</groupId><artifactId>alarm-webhook</artifactId><version>2.0.0</version><properties><maven.compiler.source>8</maven.compiler.source><maven.compiler.target>8</maven.compiler.target><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><!-- Dubbo 3.3.2  3.2.16  3.1.11   2.7.23    阿里新平台已经将HSF换成了dubbo3    --><dubbo.version>3.3.2</dubbo.version></properties><dependencies><dependency><groupId>org.apache.dubbo</groupId><artifactId>dubbo-spring-boot-starter</artifactId></dependency><dependency><groupId>org.apache.dubbo</groupId><artifactId>dubbo-registry-nacos</artifactId><version>${dubbo.version}</version></dependency><!-- Triple协议支持 --><dependency><groupId>org.apache.dubbo</groupId><artifactId>dubbo-rpc-triple</artifactId></dependency></dependencies><dependencyManagement><dependencies><!-- SpringBoot的依赖配置   2.5.15  2.6.15  2.7.183.3.5  2.5.15    --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-dependencies</artifactId><version>3.3.5</version><type>pom</type><scope>import</scope></dependency></dependencies></dependencyManagement>
</project>

SpringBoot配置

这里配置在配置文件,nacos没有做配置中心,只做了服务发现(读者也可将nacos作为配置中心把配置迁移到nacos中)

dubbo:application:name: smet-rpc-service  # smet-rpc-service  ops-portal_DUBBO_APPregister-mode: all    # instance   interface   all (default)
#        metadata-type: remote  # local remote defaultqos-enable: falsemetadata-service-port: -1#consumer服务发现模式service-discovery:# FORCE_INTERFACE,只消费接口级地址,如无地址则报错,单订阅 2.x 地址# APPLICATION_FIRST,智能决策接口级/应用级地址,双订阅# FORCE_APPLICATION,只消费应用级地址,如无地址则报错,单订阅 3.x 地址migration: FORCE_APPLICATIONconfig-center:address: none # 显式关闭配置中心metadata-report:
#        address: none
#        report-metadata: falsetimeout: 3000address: nacos://10.13.**.55:8848group: ${group}  # L  ${group}username: nacospassword: nacos***protocol:name: triport: -1  # tri 50051 -1时从50052开始找  dubbo 20880 -1时从20881开始找host: 10.13.**.55 # 显式指定服务暴露IP# 注册中心地址registry:address: nacos://10.13.16.**:8848protocol: nacos  # zookeeper nacos redis  multicastgroup: ${group}  # L  ${group}username: nacospassword: nacos****parameters:dubbo.ip: 10.13.**.55 # 注册中心使用的IPregister-consumer-url: truenamespace: smet-rpc-serviceuse-as-config-center: false # 明确声明不作为配置中心use-as-metadata-center: falseconsumer:# 负载均衡策略loadbalance: roundrobin # random  roundrobincheck: falsetimeout: 5000
nacos:discovery:server-addr: 10.13.**.55:8848username: nacospassword: nacos****namespace: smet-rpc-servicegroup: L

Dubbo客户端类

import com.***.TimeUtils;
import com.***.TagsVO;
import com.***.SmsLinkageService;
import com.alibaba.fastjson.JSONObject;
import lombok.extern.slf4j.Slf4j;
import org.apache.dubbo.config.annotation.DubboReference;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;import java.util.*;/*** @Description: **组装* @Author: brickerman* @CreateDate: 2024/7/19 8:12 PM* @Version: 1.0*/
@Slf4j
@Service
public class SmsAssembleService2 {/**  saas**度告警联动异常信息   **/@DubboReferenceprivate SmsLinkageService smsLinkageService;@Value(value="${spring.profiles.active}")private String profile;/*** 全国saas**度异常指标追踪** @param systemCode* @param dateStr* @return* @throws Exception*/private String attachCTSaasHealthDetail( String systemCode, String dateStr) throws Exception {String time = TimeUtils.calcWholeMinute();return smsLinkageService.saasCtTopErrMsg2( systemCode, time );}
}

 常见问题(FAQ)

Q1:只将nacos做为服务发现中心,报没有配metadata-report地址,且metadata-report.address配置none时无效,如果处理?

A:添加metadata-report配置

    metadata-report:
#        address: none
#        report-metadata: falsetimeout: 3000address: nacos://10.13.**.55:8848group: ${group}  # L  ${group}username: nacospassword: nacos***

Q2:为什么nacos界面菜单:服务管理-》服务列表 中只能看到应用名而看不到服务提供者的类名?

A:显示应用名、还是类名、亦或都显示由这条dubbo配置决定

# instance   interface   all (default)
dubbo.registry.register-mode=all

配置instance效果图:

Q3:SpringBoot3.3.5与dubbo3客户端集成能调到springboot2.7.18做的服务端吗?

A:能,本文就是。而且作者还有一遍文章写的dubbo3服务端,是用的springboot2.7.18

Q4:客户端是SpringBoot3能从Nacos发现springboot2注册上的服务并调用到该服务吗?

A:能,可参考作者另一篇服务端的文章

附件一:若依springboot3版本源代码下载地址

SpringBoot 3.3.5

附件二:参考资料

名称地址
阿里新一代微服务解决方案:
Spring Cloud Alibaba
https://blog.csdn.net/emprere/article/details/103982655 
dubbo RPC协议概述https://cn.dubbo.apache.org/zh-cn/overview/mannual/java-sdk/reference-manual/config/spring/spring-boot/
https://cn.dubbo.apache.org/zh-cn/overview/mannual/java-sdk/reference-manual/protocol/overview/
https://cn.dubbo.apache.org/zh-cn/overview/mannual/java-sdk/reference-manual/config/properties/#dubboprotocol
https://cn.dubbo.apache.org/zh-cn/overview/mannual/java-sdk/tasks/protocols/protocol/Dubbo 支持的 RPC 通信协议
https://blog.csdn.net/weixin_43931625/article/details/123033801tri : dubbo3主推协议,新一代dubbo协议 ,其他协议: dubbo rmi hessian, dubbo支持多协议,同协议多端口
openfeginCommon application properties
Spring Cloud OpenFeign
https://github.com/OpenFeign/feign
微服务服务间调用方式_微服务调用-CSDN博客
https://developer.aliyun.com/article/1264489 
http://www.xdnf.cn/news/18729.html

相关文章:

  • 工程师的自我修养
  • Python JSON数据格式
  • 【数据结构】-4-顺序表(上)
  • 复杂水域场景识别率↑89%!陌讯多模态融合算法在岸边垃圾检测的落地实践
  • CUDA安装,pytorch库安装
  • 小米AX3600访问桥接的光猫
  • 图解SpringMVC工作流程,以及源码分析。
  • Hibernate详解
  • 爆肝三周,我终于上线了自己的第一个小程序
  • Vue 项目 package.json 终极详解(主流实践 / 逐项说明)
  • 大型 C/C++ 项目中 AI 助手(Cursor / Claude Code)日常操作清单与发散思路
  • 详解triton.jit及PTX
  • 微服务-19.什么是网关
  • AI重塑跨境电商:选品成功率提升53%+物流效率加快34%,多语种运营成破局关键
  • 试析微剧《云端爱人》:AI时代的数字爱情寓言与情感觉醒
  • AI Agent与生成式AI双驱动:AI如何重塑商业格局并创造千亿级增量价值
  • Node【文件+模块化+对象】详讲:
  • 如何根据NTP协议报文的第一个字节来判断协议版本和处理模式?
  • 【CV】OpenCV①——OpenCV常用模块
  • 数学建模-线性规划(LP)
  • HbuilderX下载与安装
  • MATLAB GUI 设计入门:用 Guide 工具快速搭建交互界面
  • (LeetCode 每日一题) 1493. 删掉一个元素以后全为 1 的最长子数组 (双指针)
  • rust语言 (1.88) egui (0.32.1) 学习笔记(逐行注释)(十八) 使用表格
  • 【分布式中间件】Kafka 核心配置深度解析与优化指南
  • 【数据结构与算法】并查集
  • 当GitHub“断网”:从应急到终极方案,手把手搭建永不宕机的代码协作体系
  • LLM 中增量解码与模型推理解读
  • 包装类 抽象类 内部类 接口
  • Flink Slot 不足导致任务Pending修复方案