1.下载及配置nacos服务端,并启动nacos
首先到github下载nacos.zip文件,然后解压文件.
.打开目录结构,到目录 bin/nacos-mysql.sql文件,将文件运行到自己的数据库中。然后打开application.properties文件,修改mysq连接
spring.datasource.platform=mysql
db.num=1
db.url.0=jdbc:mysql://localhost:3306/nacos-test?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true
db.user=root
db.password=root
server.contextPath=/nacos
server.servlet.contextPath=/nacos
server.port=8848
然后进入到 bin目录 如果是windows 启用startup.cmd。如果是linux 启用startup.sh命令。
打开浏览器 输入http://localhost:8848/nacos 默认账号 nacos /nacos。可以看到下面页面
首先我创建了一个空间 test 然后创建了两个yml文件。
特别要注意我打标记的地方。
2、创建测试project 并配置nacos
首先创建springboot项目 然后pom中引入依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config-server</artifactId>
<version>0.9.0.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
<version>0.9.0.RELEASE</version>
</dependency>
然后再启动类加上@EnableDiscoveryClient注解。
现在我们创建了一个springboot项目 然后将配置文件重命名 bootstrap.yml。下面展示配置
server:
port: 8001
test:
nacos:
namespace: a4dbaa04-04fe-48bc-80b8-58360e508b54
group: bo
server-addr: localhost:8848
spring:
application:
name: biz-server
cloud:
nacos:
discovery:
server-addr: ${test.nacos.server-addr}
namespace: ${test.nacos.namespace}
config:
file-extension: yaml
server-addr: ${test.nacos.server-addr}
namespace: ${test.nacos.namespace}
group: ${test.nacos.group}
ext-config:
- data-id: basic-common.yaml
group: ${test.nacos.group}
refresh: true
test标签下面的nacos配置,这个是我们自定义的。主要是为了方便切换,然后spring.application.name这个是biz-server ,在nacos中必须有biz-server.yaml 要不然会保存的,在中间可以添加一个环境变量,默认会给你去掉。
然后最主要的配置实在 discovery中,首先配置上面自定义的字段值,然后config下面配置了第一张图片打箭头的有地址 命名空间还有组别等等。然后ext-config是引用其他的自定义yaml的配置文件。
配置好后,启动项目,因为我再bootstrp.yml配置了端口为8001 在biz-server配置了8100,项目启动后,会启动端口8100,配置文件会覆盖掉bootstrap.yml中的数据。
自定义一个controller写个测试看是否能拿到变量
@RestController
@RequestMapping("/api/")
public class TestController {
@Value("${test.sms.url}")
private String url;
@GetMapping("/getUrl")
public String getConfig(){
return url;
}
}
测试结果是能拿到值。
3、动态获取数据
项目已经启动,拿到的url 是baidu.com 那现在我们在配置环境的修改配置,我们刷新页面是不生效的。
对controller做如下配置就可以了
@RestController
@RequestMapping("/api/")
@RefreshScope
public class TestController {
@Value("${test.sms.url}")
private String url;
@GetMapping("/getUrl")
public String getConfig(){
return url;
}
}
成功的动态刷新,如果获取的变量是一个component那么并不需要使用@RefreshScope便可以动态刷新。
对于nacos和eureka1.0做比较,我感觉nacos比较方便,且注册中心和配置中心在一起。如果使用eureka,那么还需要去做配置中心还要集合消息队列,会很麻烦,所以我极力推崇大家微服务的时候使用nacos来做注册中心和配置中心