配置中心
1. 版本
以下是我下载的版本 https://github.com/alibaba/nacos/releases/download/1.2.1/nacos-server-1.2.1.tar.gz
其他版本可参考:
https://github.com/alibaba/nacos/releases
2. 安装
windows部署:
解压后进入nacos/bin目录,执行startup.cmd -m standalone
linux上部署
tar -xzvf nacos-server-1.2.1.tar.gz
修改端口并运行
#进入解压文件目录
cd nacos
#修改端口号,不要以默认端口运行, 10001为修改后的端口
sed -i "s/server.port=8848/server.port=10001/" conf/application.properties
cd nacos/bin
#启动单机模式
bin/startup.sh -m standalone &
测试:
http://IP:10001/nacos/#/login //显示页面正常
账号/密码: nacos/nacos
3. 在springBoot项目上使用
- 创建一个springboot工程
- 导入依赖:
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- nacos配置,注意不要用springcloud的discovery,不然注册不上nacos -->
<!-- 千万注意不要用springCloud中的discovery,不然死活注册不上 -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
<version>2.1.2.RELEASE</version>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
<version>2.1.2.RELEASE</version>
</dependency>
</dependencies>
- 配置:
- 新建启动类TestNacosApplication
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
@SpringBootApplication
@EnableDiscoveryClient
public class TestNacosApplication {
public static void main(String[] args) {
SpringApplication.run(TestNacosApplication.class, args);
}
}
- 新建一个bootstrap.yml
spring:
application:
name: nacos-config-example #指定项目的名字
cloud:
nacos:
discovery: #用于服务发现
server-addr: NacosIP:10001 #nacos配置中心地址和端口
config: #指定配置中心
server-addr: NacosIP:10001 #nacos配置中心地址和端口
file-extension: yaml #指定服务配置格式,严格要求,下面会说到有几种格式
- 在页面上新建配置
Data ID规范(严格要求,不然会匹配不了):
${spring.cloud.nacos.config.prefix}.${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}
//因为上面我没有配置${spring.profiles.active},所以忽略了
最终拼接出来的就是:nacos-config-example.yaml
file-extension: 刚刚上面说了有几种格式,就是按照上图的配置格式来定义的一种有6种(一定要按严格要求来配置,不然匹配不了,启动时会报错)
-
测试
- 新建一个测试控制层来访问
import org.springframework.beans.factory.annotation.Value; import org.springframework.cloud.context.config.annotation.RefreshScope; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @RestController @RequestMapping("/config") @RefreshScope //配置热更新 public class TestController { @Value("${info.name}") private String name; @Value("${info.age}") private Integer age; @RequestMapping("/get") public String get() { System.out.println(age+name); return age+ name; } }
启动后,访问http://127.0.0.1:8091/config/get
页面内容: 19qiqi-
@RefreshScope 以上控制层添加了配置热更新的注解,所以我们可以修改以下配置文件重新发布看看
把age修改为20
测试: 此时服务不需要重启访问http://127.0.0.1:8091/config/get
页面类容: 20qiqi
//修改成功
- 在同一个公司中可能有多个项目,某个项目中都有一套代码运行在不同的环境,在一套程序上可能在开发环境测试环境和生产环境上有不同的配置,比如端口或者工作目录,那么我们需要不同环境下有不同的配置文件,所以Nacos也支持这种项目与环境隔离:
可以使用Nacos提供的命名空间和Group用来进行配置之间的项目隔离与环境隔离
-
新建一个命名空间(用于隔离不同的项目)
-
我们去shop命名空间中新建配置,还是按以上配置新建,把
-
注意: 本次新建填写group要按规范来如下图
bootstrap.yml配置
spring: profiles: active: dev application: #指定项目的名字这样命名是为了区分某个环境向同一个注册中心注册导致不同环境调用微服务负载均衡时出现读取不同环境数据问题 name: nacos-config-example-${spring.profiles.active} cloud: nacos: username: shop password: shop server-addr: IP:10001 #nacos配置中心地址和端口 discovery: namespace: 800ba91e-def4-414a-9bbe-11cc6ad51916 #这里默认不填会使用public的名称空间 register-enabled: true #如果本地开发的话,不希望注册到Nacos的把这个改为false s config: #指定配置中心 namespace: 800ba91e-def4-414a-9bbe-11cc6ad51916 #这里默认不填会使用public的名称空间 file-extension: yaml #指定某个命名空间的组,用组来隔离不同环境和项目的配置 group: iot-${spring.profiles.active}
-
然后在bootstrap.yml中添加指定该名称空间 spring.cloud.nacos.config.namespace=800ba91e-def4-414a-9bbe-11cc6ad51916 (即刚刚生产名称空间的id)
重启,因为添加了spring.cloud.nacos.config.namespace所以我们需要重新启动加载该指令
测试:http://127.0.0.1:8092/config/get
页面类容: 19qiqi // 项目和环境隔离成功