天天看點

SpringCloud使用Hystrix的Turbine時,EurekaClient和NacosClient沖突問題

場景

我們在使用Hystrix服務熔斷、降級的時候可以使用HystrixDashBoard來監控各個接口的調用情況。但是通常情況都是單個服務部署多台,那麼我們使用HystrixDashBoard監控的時就打開多個頁面來監控?

答案是否定的。SpringCloud為我們提供了叢集的方式來解決單個服務部署多台的情況,就是Turbine機制。可以參考官網:https://docs.spring.io/spring-cloud-netflix/docs/2.2.9.RELEASE/reference/html/#turbine

SpringCloud使用Hystrix的Turbine時,EurekaClient和NacosClient沖突問題

出現的問題

我這裡是的注冊中心是Alibaba的Nacos。在整和Turbine的時報錯:

Field autoServiceRegistration in org.springframework.cloud.client.serviceregistry.AutoServiceRegistrationAutoConfiguration required a single bean, but 2 were found:
	- nacosAutoServiceRegistration: defined by method 'nacosAutoServiceRegistration' in class path resource [com/alibaba/cloud/nacos/NacosDiscoveryAutoConfiguration.class]
	- eurekaAutoServiceRegistration: defined by method 'eurekaAutoServiceRegistration' in class path resource [org/springframework/cloud/netflix/eureka/EurekaClientAutoConfiguration.class]
           

分析

Turbine需要服務資訊的時候肯定是重注冊中心去擷取的,檢視Turbine的依賴時發現它預設依賴的是EurekaClient。

SpringCloud使用Hystrix的Turbine時,EurekaClient和NacosClient沖突問題

解決方法

我們找到原因之後解決起來就很友善了,在引入Turbine是将EurekaClient排除,引入NacosClient即可:

<dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-turbine</artifactId>
            <exclusions>
                <exclusion>
                    <groupId>org.springframework.cloud</groupId>
                    <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>
           

繼續閱讀