apache / dubbo

The java implementation of Apache Dubbo. An RPC and microservice framework.
https://dubbo.apache.org/
Apache License 2.0
40.4k stars 26.42k forks source link

dubbo 3.0.1 dubbo.provider.delay参数设置后报空指针 #8241

Closed egalee closed 3 years ago

egalee commented 3 years ago

问题

在测试新发布的3.0.1时,如果给dubbo.provider.delay指定值实现延迟暴露时,启动时会报空指针异常。

环境

核心代码

  1. maven 依赖文件

    <properties>
        <spring-boot.version>2.3.0.RELEASE</spring-boot.version>
        <dubbo.version>3.0.1</dubbo.version>
        <nacos-client.version>2.0.1</nacos-client.version>
        <java.version>1.8</java.version>
    </properties>
    
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo-spring-boot-starter</artifactId>
        </dependency>
        <dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo</artifactId>
        </dependency>
        <dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo-registry-nacos</artifactId>
        </dependency>
        <dependency>
            <groupId>com.alibaba.nacos</groupId>
            <artifactId>nacos-client</artifactId>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-core</artifactId>
        </dependency>
    </dependencies>
    
    <dependencyManagement>
        <dependencies>
            <!-- Apache Dubbo  -->
            <dependency>
                <groupId>org.apache.dubbo</groupId>
                <artifactId>dubbo-dependencies-bom</artifactId>
                <version>${dubbo.version}</version>
                <type>pom</type>
                <scope>compile</scope>
            </dependency>
    
            <!-- Dubbo Registry Nacos -->
            <dependency>
                <groupId>org.apache.dubbo</groupId>
                <artifactId>dubbo-registry-nacos</artifactId>
                <version>${dubbo.version}</version>
                <scope>compile</scope>
            </dependency>
    
            <dependency>
                <groupId>com.alibaba.nacos</groupId>
                <artifactId>nacos-client</artifactId>
                <version>${nacos-client.version}</version>
                <scope>compile</scope>
            </dependency>
    
            <!-- Dubbo Spring Boot Starter -->
            <dependency>
                <groupId>org.apache.dubbo</groupId>
                <artifactId>dubbo-spring-boot-starter</artifactId>
                <version>${dubbo.version}</version>
                <scope>compile</scope>
            </dependency>
    
            <dependency>
                <groupId>org.apache.dubbo</groupId>
                <artifactId>dubbo</artifactId>
                <version>${dubbo.version}</version>
                <scope>compile</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>
  2. application.properties配置

    dubbo.application.name=dubbo-provider
    dubbo.registry.address=nacos://127.0.0.1:8848
    dubbo.registry.check=false
    dubbo.registry.username=nacos
    dubbo.registry.password=nacos
    dubbo.provider.delay=5000
    dubbo.consumer.check=false
    dubbo.metadata-report.address=nacos://127.0.0.1:8848
    dubbo.metadata-report.username=nacos
    dubbo.metadata-report.password=nacos
    dubbo.protocol.name=dubbo
    dubbo.protocol.port=20885
    dubbo.protocol.threadpool=fixed
    dubbo.protocol.threads=500
    dubbo.version=1.0.0
  3. 启动报空指针

    java.lang.NullPointerException: null at org.apache.dubbo.registry.client.metadata.ServiceInstanceMetadataUtils.getMetadataServiceParameter(ServiceInstanceMetadataUtils.java:115) ~[dubbo-3.0.1.jar:3.0.1] at org.apache.dubbo.registry.client.metadata.MetadataServiceURLParamsMetadataCustomizer.resolveMetadataPropertyValue(MetadataServiceURLParamsMetadataCustomizer.java:51) ~[dubbo-3.0.1.jar:3.0.1] at org.apache.dubbo.registry.client.metadata.MetadataServiceURLParamsMetadataCustomizer.customize(MetadataServiceURLParamsMetadataCustomizer.java:38) ~[dubbo-3.0.1.jar:3.0.1] at org.apache.dubbo.registry.client.metadata.ServiceInstanceMetadataUtils.lambda$customizeInstance$2(ServiceInstanceMetadataUtils.java:285) ~[dubbo-3.0.1.jar:3.0.1] at java.lang.Iterable.forEach(Iterable.java:75) ~[na:1.8.0_201] at org.apache.dubbo.registry.client.metadata.ServiceInstanceMetadataUtils.customizeInstance(ServiceInstanceMetadataUtils.java:283) ~[dubbo-3.0.1.jar:3.0.1] at org.apache.dubbo.config.bootstrap.DubboBootstrap.createServiceInstance(DubboBootstrap.java:1432) ~[dubbo-3.0.1.jar:3.0.1] at org.apache.dubbo.config.bootstrap.DubboBootstrap.registerServiceInstance(DubboBootstrap.java:1373) ~[dubbo-3.0.1.jar:3.0.1] at org.apache.dubbo.config.bootstrap.DubboBootstrap.start(DubboBootstrap.java:1103) ~[dubbo-3.0.1.jar:3.0.1] at org.apache.dubbo.config.spring.context.DubboBootstrapApplicationListener.onContextRefreshedEvent(DubboBootstrapApplicationListener.java:80) ~[dubbo-3.0.1.jar:3.0.1] at org.apache.dubbo.config.spring.context.DubboBootstrapApplicationListener.onApplicationContextEvent(DubboBootstrapApplicationListener.java:72) ~[dubbo-3.0.1.jar:3.0.1] at com.alibaba.spring.context.OnceApplicationContextEventListener.onApplicationEvent(OnceApplicationContextEventListener.java:52) ~[spring-context-support-1.0.8.jar:na] at org.springframework.context.event.SimpleApplicationEventMulticaster.doInvokeListener(SimpleApplicationEventMulticaster.java:176) ~[spring-context-5.3.5.jar:5.3.5] at org.springframework.context.event.SimpleApplicationEventMulticaster.invokeListener(SimpleApplicationEventMulticaster.java:169) ~[spring-context-5.3.5.jar:5.3.5] at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:143) ~[spring-context-5.3.5.jar:5.3.5] at org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:421) ~[spring-context-5.3.5.jar:5.3.5] at org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:378) ~[spring-context-5.3.5.jar:5.3.5] at org.springframework.context.support.AbstractApplicationContext.finishRefresh(AbstractApplicationContext.java:938) ~[spring-context-5.3.5.jar:5.3.5] at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:586) ~[spring-context-5.3.5.jar:5.3.5] at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:144) ~[spring-boot-2.4.4.jar:2.4.4] at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:769) [spring-boot-2.4.4.jar:2.4.4] at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:761) [spring-boot-2.4.4.jar:2.4.4] at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:426) [spring-boot-2.4.4.jar:2.4.4] at org.springframework.boot.SpringApplication.run(SpringApplication.java:326) [spring-boot-2.4.4.jar:2.4.4] at org.springframework.boot.SpringApplication.run(SpringApplication.java:1313) [spring-boot-2.4.4.jar:2.4.4] at org.springframework.boot.SpringApplication.run(SpringApplication.java:1302) [spring-boot-2.4.4.jar:2.4.4] at cn.liyuguo.user.StartService.main(StartService.java:12) [classes/:na]

同样的配置,在2.7.11中,运行是正常的,如果配置方式已调整,请帮忙指出新的配置方法。

kevinw66 commented 3 years ago

如果服务数量不多的话,给每个服务配置一下delay试试 3.0新增了默认的MetadataService,而dubbo.provider.delay=5000是给全局配置了delay,导致MetadataService也delay了,最后报了空指针

egalee commented 3 years ago

如果服务数量不多的话,给每个服务配置一下delay试试 3.0新增了默认的MetadataService,而dubbo.provider.delay=5000是给全局配置了delay,导致MetadataService也delay了,最后报了空指针

非常感谢!