[apache/dubbo]Dubbo3.2.0版本,ServiceConfig export到多Nacos注册中心后unexport不能取消所有Nacos上的注册

2023-12-11 910 views
2

Environment

  • Dubbo version: 3.2.0
  • Operating System version: win10
  • Java version: 1.8
  • Nacos2.1.2 Standalone启动 复现步骤:
    1. 下载Nacos2.1.2版本包,并修改application.properties配置文件端口分别为8848和8858,然后执行 ./startup.cmd -m standalone启动
    2. 在官方dubbo-3.2.0 Tag版本代码dubbo-demo/dubbo-demo-spring-boot/dubbo-demo-spring-boot-provider目录下修改pom.xml文件,移除zookeeper依赖,引入dubbo-registry-nacos依赖
        <!-- <dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo-registry-zookeeper</artifactId>
        </dependency>

        <dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo-configcenter-zookeeper</artifactId>
        </dependency>

        <dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo-metadata-report-zookeeper</artifactId>
        </dependency>-->
        <dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo-registry-nacos</artifactId>
        </dependency>
  1. 创建如下测试类并运行,可以发现能在正常注册到两个nacos中,但是unexport时只取消了第一个nacos上的注册,第二个没有取消
package org.apache.dubbo.springboot.demo.provider;

import org.apache.dubbo.common.constants.CommonConstants;
import org.apache.dubbo.config.ApplicationConfig;
import org.apache.dubbo.config.ProtocolConfig;
import org.apache.dubbo.config.RegistryConfig;
import org.apache.dubbo.config.ServiceConfig;
import org.apache.dubbo.config.bootstrap.DubboBootstrap;
import org.apache.dubbo.springboot.demo.DemoService;

import java.util.Arrays;

public class TestMultiRegistryBug {
    public static void main(String[] args) throws InterruptedException {
        startWithBootstrap();
    }
    private static void startWithBootstrap() throws InterruptedException {
        ServiceConfig<DemoServiceImpl> service = new ServiceConfig<>();
        service.setInterface(DemoService.class);
        service.setRef(new DemoServiceImpl());
        RegistryConfig beijing = new RegistryConfig();
        beijing.setAddress("nacos://nacos:nacos@localhost:8848/");
        RegistryConfig hangzhou = new RegistryConfig();
        hangzhou.setAddress("nacos://nacos:nacos@localhost:8858/");
        service.setRegistries(Arrays.asList(beijing, hangzhou));

        DubboBootstrap bootstrap = DubboBootstrap.getInstance();
        bootstrap.application(new ApplicationConfig("test-dual-center-registry-bug"))
            .protocol(new ProtocolConfig(CommonConstants.DUBBO, -1))
            .service(service)
            .start();

        Thread.sleep(20000);
        // 执行下面的代码
        System.out.println("======= Dubbo service started ============");
        service.unexport();
        bootstrap.await();
    }
}

1695281940492 第二个Nacos 1695281975614 第一个Nacos 1695281995196 当服务需要优雅下线时,不能下线掉所有的Nacos注册中心

回答

8

@AlbumenJ 谢谢,已验证3.2.6没有问题,这个功能不会在3.2.0上修复了是么,相关修复提交有么?

3

3.2.6版本验证无问题

9

3.2.6 和 3.2.0 同为 3.2.x 系列,3.2.6 为 3.2.0 的替代版本

6

相关 PR 有点难找,你可以看下 RegistryProtocol 这个类的最近修改