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

dubbo2.7.5以后版本集成zipkin存在启动问题 #7117

Closed gfgfggf1988 closed 2 years ago

gfgfggf1988 commented 3 years ago

【测试环境信息】 springboot 2.3.1.RELEASE dubbo-spring-boot-autoconfigure 2.7.8 spring-cloud-starter-alibaba-nacos 2.1.0.RELEASE spring-cloud-starter-zipkin 2.2.6.RELEASE 【异常信息】 在dubbo 2.7.8环境下,配置dubbo的consumer与provider

<bean id="demoService" class="com.example.demo.dubbo.DemoServiceImpl" />
<dubbo:reference id="demoService2" interface="com.example.demo.dubbo.DemoService"/>

image 启动时出现异常信息,此时注释 <dubbo:reference 配置,应用启动正常

【切换版本】 把dubbo降级到2.7.3,配置dubbo的consumer与provider应用启动正常

【问题定位】 怀疑是 2.7.5增加的addIntoConfigManager加载存在问题,希望能做个容错,回溯低版本配置载入configmanager过程 image

gfgfggf1988 commented 3 years ago

异常信息 java.lang.IllegalStateException: No registry config found or it's not a valid config! The registry config is: at org.apache.dubbo.config.AbstractInterfaceConfig.checkRegistry(AbstractInterfaceConfig.java:185) ~[dubbo-2.7.8.jar:2.7.8] at org.apache.dubbo.config.ServiceConfig.checkAndUpdateSubConfigs(ServiceConfig.java:229) ~[dubbo-2.7.8.jar:2.7.8] at org.apache.dubbo.config.ServiceConfig.export(ServiceConfig.java:193) ~[dubbo-2.7.8.jar:2.7.8] at org.apache.dubbo.config.bootstrap.DubboBootstrap.lambda$exportServices$15(DubboBootstrap.java:1103) ~[dubbo-2.7.8.jar:2.7.8] at java.util.HashMap$Values.forEach(HashMap.java:981) ~[na:1.8.0_271] at org.apache.dubbo.config.bootstrap.DubboBootstrap.exportServices(DubboBootstrap.java:1090) ~[dubbo-2.7.8.jar:2.7.8] at org.apache.dubbo.config.bootstrap.DubboBootstrap.start(DubboBootstrap.java:901) ~[dubbo-2.7.8.jar:2.7.8] at org.apache.dubbo.config.spring.context.DubboBootstrapApplicationListener.onContextRefreshedEvent(DubboBootstrapApplicationListener.java:59) ~[dubbo-2.7.8.jar:2.7.8] at org.apache.dubbo.config.spring.context.DubboBootstrapApplicationListener.onApplicationContextEvent(DubboBootstrapApplicationListener.java:52) ~[dubbo-2.7.8.jar:2.7.8] at org.apache.dubbo.config.spring.context.OneTimeExecutionApplicationContextEventListener.onApplicationEvent(OneTimeExecutionApplicationContextEventListener.java:40) ~[dubbo-2.7.8.jar:2.7.8] at org.springframework.context.event.SimpleApplicationEventMulticaster.doInvokeListener(SimpleApplicationEventMulticaster.java:172) ~[spring-context-5.2.7.RELEASE.jar:5.2.7.RELEASE] at org.springframework.context.event.SimpleApplicationEventMulticaster.invokeListener(SimpleApplicationEventMulticaster.java:165) ~[spring-context-5.2.7.RELEASE.jar:5.2.7.RELEASE] at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:139) ~[spring-context-5.2.7.RELEASE.jar:5.2.7.RELEASE] at org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:404) ~[spring-context-5.2.7.RELEASE.jar:5.2.7.RELEASE] at org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:361) ~[spring-context-5.2.7.RELEASE.jar:5.2.7.RELEASE] at org.springframework.context.support.AbstractApplicationContext.finishRefresh(AbstractApplicationContext.java:898) ~[spring-context-5.2.7.RELEASE.jar:5.2.7.RELEASE] at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:554) ~[spring-context-5.2.7.RELEASE.jar:5.2.7.RELEASE] at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:143) ~[spring-boot-2.3.1.RELEASE.jar:2.3.1.RELEASE] at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:758) [spring-boot-2.3.1.RELEASE.jar:2.3.1.RELEASE] at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:750) [spring-boot-2.3.1.RELEASE.jar:2.3.1.RELEASE] at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:397) [spring-boot-2.3.1.RELEASE.jar:2.3.1.RELEASE] at org.springframework.boot.SpringApplication.run(SpringApplication.java:315) [spring-boot-2.3.1.RELEASE.jar:2.3.1.RELEASE] at org.springframework.boot.SpringApplication.run(SpringApplication.java:1237) [spring-boot-2.3.1.RELEASE.jar:2.3.1.RELEASE] at org.springframework.boot.SpringApplication.run(SpringApplication.java:1226) [spring-boot-2.3.1.RELEASE.jar:2.3.1.RELEASE] at com.example.demo.Demo4Application.main(Demo4Application.java:13) [classes/:na]

gfgfggf1988 commented 3 years ago

定位怀疑的代码位置:AbstractConfig

/**

kevinw66 commented 3 years ago

能否麻烦发一个可以复现的工程上来呢

gfgfggf1988 commented 3 years ago

能否麻烦发一个可以复现的工程上来呢

demo4.zip 需要修改yixi一下nacos的地址和zipkin地址

gfgfggf1988 commented 3 years ago

能否麻烦发一个可以复现的工程上来呢

咋样 能用么?找到问题了么?

kevinw66 commented 3 years ago

能否麻烦发一个可以复现的工程上来呢

咋样 能用么?找到问题了么?

我周末看看

kevinw66 commented 3 years ago

Spring Cloud工程的话建议直接使用spring-cloud-starter-dubbo 文档参考这里《Spring Cloud Alibaba 分布式服务调用》 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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.example</groupId>
  <artifactId>demo4</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <name>demo4</name>
  <description>Demo project for Spring Boot</description>
  <properties>
    <java.version>1.8</java.version>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
    <spring-boot.version>2.3.7.RELEASE</spring-boot.version>
    <spring-cloud-alibaba.version>2.2.4.RELEASE</spring-cloud-alibaba.version>
    <spring-cloud.version>Hoxton.SR9</spring-cloud.version>
  </properties>

  <dependencyManagement>
    <dependencies>
      <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-dependencies</artifactId>
        <version>${spring-cloud.version}</version>
        <type>pom</type>
        <scope>import</scope>
      </dependency>
      <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-dependencies</artifactId>
        <version>${spring-boot.version}</version>
        <type>pom</type>
        <scope>import</scope>
      </dependency>
      <dependency>
        <groupId>com.alibaba.cloud</groupId>
        <artifactId>spring-cloud-alibaba-dependencies</artifactId>
        <version>${spring-cloud-alibaba.version}</version>
        <type>pom</type>
        <scope>import</scope>
      </dependency>
    </dependencies>
  </dependencyManagement>

  <dependencies>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-configuration-processor</artifactId>
    </dependency>
    <dependency>
      <groupId>org.apache.commons</groupId>
      <artifactId>commons-lang3</artifactId>
    </dependency>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-test</artifactId>
      <scope>test</scope>
    </dependency>

    <dependency>
      <groupId>com.alibaba.cloud</groupId>
      <artifactId>spring-cloud-starter-dubbo</artifactId>
    </dependency>

    <dependency>
      <groupId>com.alibaba.cloud</groupId>
      <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
    </dependency>
    <dependency>
      <groupId>com.alibaba.cloud</groupId>
      <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
    </dependency>

    <dependency>
      <groupId>org.springframework.cloud</groupId>
      <artifactId>spring-cloud-starter-zipkin</artifactId>
    </dependency>
  </dependencies>

  <build>
    <finalName>gf-test</finalName>
    <resources>
      <resource>
        <directory>src/main/resources</directory>
        <filtering>true</filtering>
        <includes>
          <include>**/*.yml</include>
          <include>**/*.xml</include>
        </includes>
      </resource>
    </resources>
    <plugins>
      <plugin>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-maven-plugin</artifactId>
      </plugin>
    </plugins>
  </build>

</project>
AlbumenJ commented 3 years ago

从报错日志看应该是配置项没有正确注入到 Dubbo 导致的查找不到注册中心信息导致的

kevinw66 commented 3 years ago

从报错日志看应该是配置项没有正确注入到 Dubbo 导致的查找不到注册中心信息导致的

是的,我调试的时候发现dubbo-spring-boot-autoconfigure 2.7.3是手动设置的RegistryConfig,但是2.7.8版本是通过BeanPostProcessor设置的,如果不加zipkin依赖一切正常,加了zipkin依赖会导致BeanPostProcessor设置RegistryConfig之前就尝试注入registry,所以获取到的配置都为空。暂时没发现是什么原因,推测可能也是版本的问题,所以推荐直接使用spring-cloud-starter-dubbo

CrazyHZM commented 2 years ago

No feedback for a long time, please close the issue temporarily. If there is still a problem, you can reopen it.