場景
我們在使用Hystrix服務熔斷、降級的時候可以使用HystrixDashBoard來監控各個接口的調用情況。但是通常情況都是單個服務部署多台,那麼我們使用HystrixDashBoard監控的時就打開多個頁面來監控?
答案是否定的。SpringCloud為我們提供了叢集的方式來解決單個服務部署多台的情況,就是Turbine機制。可以參考官網:https://docs.spring.io/spring-cloud-netflix/docs/2.2.9.RELEASE/reference/html/#turbine
出現的問題
我這裡是的注冊中心是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。
解決方法
我們找到原因之後解決起來就很友善了,在引入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>