Nacos 是阿里开源的 RCP 服务注册发现、配置中心等功能的一个框架。
使用Nacos可以作为spring cloud 服务注册中心和配置中心,如果在生成环境使用,需要搭建集群,实现高可用,并且通过域名实现负载均衡。
官方参考文档: Nacos集群部署
Nginx配置
upstream nacos {
server 127.0.0.1:8848;
server 127.0.0.1:8849;
server 127.0.0.1:8850;
}
server {
listen 80;
server_name nacos.com;
location / {
proxy_pass http://nacos;
}
}
Spring Cloud 项目集成Nacos
maven依赖:
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>0.9.0.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<!-- nacos-服务注册发现 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<!-- nacos-配置中心 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
</dependencies>
配置:
1. bootstrap.properties
spring.cloud.nacos.config.server-addr=nacos.com:80
spring.application.name=demo-core
2. application.yml
server:
port: 9000
spring:
profiles:
active: @profileActive@
cloud:
nacos:
discovery:
server-addr: nacos.com:80
group: DEFAULT_GROUP
config:
group: DEFAULT_GROUP
file-extension: properties
3. application-dev.properties
根据不同的环境,可以创建命名空间,命名空间namespace配置的是ID,不是名称
#nacos 命名空间
spring.cloud.nacos.discovery.namespace=8b4cd4e4-c018-42a7-a8e2-e3c724e6d80b
spring.cloud.nacos.config.namespace=8b4cd4e4-c018-42a7-a8e2-e3c724e6d80b
启动类
@SpringCloudApplication
@EnableDiscoveryClient
@EnableFeignClients
@Slf4j
public class CoreApplication {
public static void main(String[] args) {
SpringApplication.run(CoreApplication.class, args);
log.info("----------- CoreApplication Start Success ------------");
}
@Bean
@LoadBalanced
RestTemplate restTemplate() {
return new RestTemplate();
}
}
启动后,可以在Nacos控制台查看
配置文件data id 文件名规则:${prefix}-${spring.profile.active}.${file-extension}
prefix 默认为 spring.application.name 的值,也可以通过配置
注意
1. server-addr= 域名+port,如果只配置server-addr=nacos.com,Nacos 代码生成的路径中,会在域名后加端口8848,访问路径不对。
2. Spring cloud 项目配置文件加载顺序,最先加载bootstrap.properties,项目中要有bootstrap.properties文件,并在bootstrap.properties中包含配置中心地址
3. Nacos 目前有个bug,服务注册时,group默认DEFAULT_GROUP,如果自定义group,注册后发现还是DEFAULT_GROUP,自定义的不生效。
4. 使用Nacos作为配置中心时,命名空间默认就是public, 其他自定义的命名空间无效,只有服务注册发现才区分命名空间。因为对于配置,阿里最初命名空间用来区分不同业务开发场景的,不是用来区分开发、测试、线上环境的,因为配置文件名data id 已经可以区分环境,官方目前也没有对该问题作出修改,我试了如下最新版也不可以。
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
<version>2.2.1.RELEASE</version>
</dependency>