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