若依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

环境介绍

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

模块结构

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

升级过程

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

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

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

POM代码

若依新模块的pom文件

XML 复制代码
<?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.18
                3.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中)

Scala 复制代码
dubbo:
    application:
        name: smet-rpc-service  # smet-rpc-service  ops-portal_DUBBO_APP
        register-mode: all    # instance   interface   all (default)
#        metadata-type: remote  # local remote default
        qos-enable: false
        metadata-service-port: -1
        #consumer服务发现模式
        service-discovery:
            # FORCE_INTERFACE,只消费接口级地址,如无地址则报错,单订阅 2.x 地址
            # APPLICATION_FIRST,智能决策接口级/应用级地址,双订阅
            # FORCE_APPLICATION,只消费应用级地址,如无地址则报错,单订阅 3.x 地址
            migration: FORCE_APPLICATION

    config-center:
        address: none # 显式关闭配置中心

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

    protocol:
        name: tri
        port: -1  # tri 50051 -1时从50052开始找  dubbo 20880 -1时从20881开始找
        host: 10.13.**.55 # 显式指定服务暴露IP

    # 注册中心地址
    registry:
        address: nacos://10.13.16.**:8848
        protocol: nacos  # zookeeper nacos redis  multicast
        group: ${group}  # L  ${group}
        username: nacos
        password: nacos****
        parameters:
            dubbo.ip: 10.13.**.55 # 注册中心使用的IP
            register-consumer-url: true
            namespace: smet-rpc-service
        use-as-config-center: false # 明确声明不作为配置中心
        use-as-metadata-center: false

    consumer:
        # 负载均衡策略
        loadbalance: roundrobin # random  roundrobin
        check: false
        timeout: 5000
nacos:
    discovery:
        server-addr: 10.13.**.55:8848
        username: nacos
        password: nacos****
        namespace: smet-rpc-service
        group: L

Dubbo客户端类

java 复制代码
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**度告警联动异常信息   **/
    @DubboReference
    private 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配置

Matlab 复制代码
    metadata-report:
#        address: none
#        report-metadata: false
        timeout: 3000
        address: nacos://10.13.**.55:8848
        group: ${group}  # L  ${group}
        username: nacos
        password: nacos***

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

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

css 复制代码
# 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/++++ |
| dubbo RPC协议概述 | ++++https://cn.dubbo.apache.org/zh-cn/overview/mannual/java-sdk/reference-manual/protocol/overview/++++ |
| dubbo RPC协议概述 | ++++https://cn.dubbo.apache.org/zh-cn/overview/mannual/java-sdk/reference-manual/config/properties/#dubboprotocol++++ |
| dubbo RPC协议概述 | ++++https://cn.dubbo.apache.org/zh-cn/overview/mannual/java-sdk/tasks/protocols/protocol/Dubbo 支持的 RPC 通信协议++++ |
| dubbo RPC协议概述 | ++++https://blog.csdn.net/weixin_43931625/article/details/123033801tri : dubbo3主推协议,新一代dubbo协议 ,其他协议: dubbo rmi hessian, dubbo支持多协议,同协议多端口++++ |
| openfegin | ++++Common application properties++++ |
| openfegin | ++++Spring Cloud OpenFeign++++ |
| openfegin | ++++https://github.com/OpenFeign/feign++++ |
| openfegin | ++++微服务服务间调用方式_微服务调用-CSDN博客++++ |
| openfegin | ++++https://developer.aliyun.com/article/1264489++++ |