spring-boot有了eureka 怎么再添加一個nacos呢?使用eureka本身就可以實現配置中心,又為何要再用nacos作為配置中心呢?
一般實現都是使用單個的注冊中心(包含服務注冊+配置中心),上面的情況很少使用。考慮到eureka的配置中心比較繁瑣,需要git+github,沒有nacos簡單,所以直接安裝一個nacos就可以了,它有自己的內置數據庫。
下面講解一下如何配置nacos(在spring-boot+eureka的基礎上)。假設已經搭建好了spring-boot+eureka,下面來說明如何再引入nacos。
1)在nacos中(localhost:8848/nacos/index.html)中創建nacos-config-dev.yml
2)在bootstrop.yml添加內容:
server: port: 9001 spring: application: ## 指定服務名稱,在nacos中的名字 name: nacos-provider cloud: nacos: discovery: # nacos的服務地址,nacos-server中IP地址:端口號 server-addr: 127.0.0.1:8848 management: endpoints: web: exposure: ## yml文件中存在特殊字符,必須用單引號包含,否則啟動報錯 include: '*'
2、修改pom.xml
引入nacos的依賴,在pom.xml中添加
<!-- nacos --> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId> <version>2.2.1.RELEASE</version> </dependency> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> <version>2.2.1.RELEASE</version> </dependency>
注意:我的spring-boot是2.3.4 ,nacos客戶端是1.4.0
3、修改bootstrop.yml
一般配置好pom.xml后,啟動后會報錯,以下為我遇到的報錯:
1)Field registration in org.springframework.cloud.client.serviceregistry.ServiceRegistryAutoConfiguration$ServiceRegistryEndpointConfiguration required a single bean, but 2 were found:這個是注冊中心多了,spring不知道要注入哪個。解決方法:
在bootstrap.yml中添加:
spring: autoconfigure: exclude: com.alibaba.cloud.nacos.registry.NacosServiceRegistryAutoConfiguration
2)無法找到類:org.springframework.cloud.client.discovery.ReactiveDiscoveryClient。這個是jar沖突導致的。找到沖突的jar包,在pom.xml中刪除,我的情況是spring-boot-commons的版本不對,一個是2.0.0,一個是2.2.2,導致啟動的時候總是找缺失類的那個jar包,因此我刪除了2.0.0,同時引入了2.2.2.如:
<!-- nacos --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-commons</artifactId> <version>2.2.2.RELEASE</version> </dependency> <dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> </dependency> <version>2.0.0.RELEASE</version> <exclusions> <exclusion> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-commons</artifactId> </exclusion> </exclusions> </dependency>
3)報錯ClassNotFoundException:org.springframework.cloud.client.loadbalancer.LoadBalancerClientsProperties
關閉版本兼容性檢測,bootstrop.yml中添加:
spring:
cloud:
compatibility-verifier:
enabled: false
完成以上更改,啟動項目即可。
參考:
https://didispace-wx.blog.csdn.net/article/details/89702127?spm=1001.2101.3001.6650.1&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-1.pc_relevant_default&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-1.pc_relevant_default&utm_relevant_index=2
https://www.cnblogs.com/chengbaiyi/p/11943878.html#3autoserviceregistrationconfiguration