apache / dubbo-spring-boot-project

Spring Boot Project for Apache Dubbo
https://dubbo.apache.org
Apache License 2.0
5.41k stars 1.88k forks source link

spring gateway与dubbo同时使用时Environment有冲突 #709

Closed DawnSouther closed 4 years ago

DawnSouther commented 4 years ago

问题简述:

在引入dubbo-spring-boot-starter后,spring gateway无法路由至目标服务,会报空指针错误。 image

依赖版本

spring gateway版本 2.2.2.RELEASE spring-cloud-loadbalancer版本 2.2.2.RELEASE dubbo版本 2.7.4.1 dubbo-spring-boot-starter版本 2.7.4.1 注册中心使用consul 1.6.2版本

部分pom.xml

    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-gateway</artifactId>
    </dependency>
    <dependency>
        <groupId>org.apache.dubbo</groupId>
        <artifactId>dubbo</artifactId>
    </dependency>
    <dependency>
        <groupId>org.apache.dubbo</groupId>
        <artifactId>dubbo-spring-boot-starter</artifactId>
    </dependency>
    <dependency>
        <groupId>org.apache.dubbo</groupId>
        <artifactId>dubbo-dependencies-zookeeper</artifactId>
        <type>pom</type>
    </dependency>

部分路由配置

image

问题描述

在引入dubbo-spring-boot-starter依赖后(单独引入dubbo和dubbo-dependencies-zookeeper不会出现此问题,意味着仅引入,不配置不使用), gateway中的依赖包spring-cloud-loadbalancer配置类 org.springframework.cloud.loadbalancer.annotation.LoadBalancerClientConfigurationorg.springframework.cloud.loadbalancer.annotation.LoadBalancerClientConfiguration.ReactiveSupportConfiguration。 在创建bean reactorServiceInstanceLoadBalancerdiscoveryClientServiceInstanceListSupplier时,取得Environment,与ApplicationContext中取得的的Environment不一致; 但在不引入dubbo-spring-boot-starter时,注入的Environment与ApplicationContext中取得的的Environment一致。 疑似Environment注入错误?

原始代码

image

临时解决办法

我修改了spring-cloud-loadbalancer源码,将Environment换为从ApplicationContext取得,问题可以解决。

修改后的代码及变量记录

bean reactorServiceInstanceLoadBalancer image

bean discoveryClientServiceInstanceListSupplier image

mercyblitz commented 4 years ago

Please upgrade Dubbo Spring Boot 2.7.6.

DawnSouther commented 4 years ago

Please upgrade Dubbo Spring Boot 2.7.6.

the problem still exists. this is my new pom

    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-gateway</artifactId>
    </dependency>
    <dependency>
        <groupId>org.apache.dubbo</groupId>
        <artifactId>dubbo-spring-boot-starter</artifactId>
    </dependency>
    <dependency>
        <groupId>com.orbitz.consul</groupId>
        <artifactId>consul-client</artifactId>
        <version>1.4.2</version>
    </dependency>