官方文档:
https://github.com/alibaba/nacos
https://nacos.io/zh-cn/docs/quick-start.html
部署环境
- MySQL 5.6
- Java 1.8
- linux 7.0
1 nacos 集群
- 修改cluster.conf.example,去掉example,配置三台机器的地址和端口号,默认端口号是8848
#example
192.168.31.250:8848
192.168.31.251:8848
192.168.31.252:8848
- MySQL数据库,执行nacos-mysql.sql初始化数据库
mysql -uroot -proot -Dnacos < nacos-mysql.sql
- 修改application.properties文件,里面修改数据库配置
spring.datasource.platform=mysql
db.num=1
db.url.0=jdbc:mysql://192.168.31.187:3306/nacos?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&serverTimezone=UTC
db.user.0=root
db.password.0=root
- 启动:./bin/startup.sh
bin目录,执行startup.sh,检查logs目录下的start.out启动日志。
任何一个节点的8848端口的/nacos地址,进入nacos控制台,nacos集群的具体情况 。 http://192.168.31.250:8848/nacos/index.html
2 Nacos Discovery Starter 完成 Spring Cloud 应用的配置中心
Nacos 添加user 信息 ( dataId 为 nacos-config-example.properties ,group 为 DEFAULT_GROUP)
user.id=1
user.name=james
user.age=17
1 依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
2 修改application.properties
server.port=18084 #可选
spring.application.name=nacos-config-example #可选
spring.cloud.nacos.config.server-addr=ip:8848 #nacos IP 地址
management.endpoints.web.exposure.include=* # 应用启动
3 配置
@RefreshScope //打开动态刷新功能
class SampleController {
@Value("${user.name}")
String userName;
@Value("${user.age}")
int age;
}
4 访问 http://localhost:18084/user
1.Nacos Config 数据结构 ( dataId, group :调用的接口 ConfigService.getConfig(String dataId, String group, long timeoutMs )
- Nacos Config 主要通过 dataId 和 group 来唯一确定一条配置.
- Nacos Client 从 Nacos Server 端获取数据时,调用的是此接口 ConfigService.getConfig(String dataId, String group, long timeoutMs)。
2.Spring Cloud 应用获取数据 ( dataId 可以通过配置项 spring.cloud.nacos.config.file-extension来配置)
在 Nacos Config Starter 中,dataId 的拼接格式如下
${prefix} - ${spring.profiles.active} . ${file-extension}
- prefix 默认为 spring.application.name 的值,也可以通过配置项 spring.cloud.nacos.config.prefix来配置。
- spring.profiles.active 即为当前环境对应的 profile
- file-extension 为配置内容的数据格式,可以通过配置项 spring.cloud.nacos.config.file-extension来配置。 目前只支持 properties 类型。
group
- group 默认为 DEFAULT_GROUP,可以通过 spring.cloud.nacos.config.group 配置。
3.自动注入 (@Value 注解)
- Nacos Config Starter 实现了 org.springframework.cloud.bootstrap.config.PropertySourceLocator接口,并将优先级设置成了最高。
- 在 Spring Cloud 应用启动阶段,会主动从 Nacos Server 端获取对应的数据,并将获取到的数据转换成 PropertySource 且注入到 Environment 的 PropertySources 属性中,所以使用 @Value 注解也能直接获取 Nacos Server 端配置的内容。
4.动态刷新(给类添加 @RefreshScope 或 @ConfigurationProperties注解)
- Nacos Config Starter 默认为所有获取数据成功的 Nacos 的配置项添加了监听功能,在监听到服务端配置发生变化时会实时触发 org.springframework.cloud.context.refresh.ContextRefresher 的 refresh 方法 。
- 如果需要对 Bean 进行动态刷新,给类添加 @RefreshScope 或 @ConfigurationProperties注解。
5.Endpoint 信息查看
- Springboot支持这一点,Nacos Config也同时可以使用Endpoint来暴露信息。
- 在maven 中添加 spring-boot-starter-actuator依赖,并在配置中允许 Endpoints 的访问。
- Spring Boot 1.x 中添加配置 management.security.enabled=false
- Spring Boot 2.x 中添加配置 management.endpoints.web.exposure.include=*
- Spring Boot 1.x 可以通过访问 http://127.0.0.1:18084/nacos_config 来查看 Nacos Endpoint 的信息。
- Spring Boot 2.x 可以通过访问 http://127.0.0.1:18084/actuator/nacos-config 来访问。
3 Nacos Discovery Starter 完成 Spring Cloud 应用的服务注册与发现。
1 添加依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
2 修改application.properties配置
spring.cloud.nacos.discovery.server-addr=192.168.31.250:8848
spring.application.name=service-provider #可选
server.port=18082 #可选
3 服务注册和发现: 注解 @EnableDiscoveryClient
@SpringBootApplication
@EnableDiscoveryClient
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
4查询服务
http://127.0.0.1:8848/nacos/v1/ns/instances?serviceName=service-provider