Nacos基础
# Nacos基本使用
# 1.windows版安装
启动服务
.\startup.cmd -m standalone
输入网址访问,默认账户密码都是nacos
http://127.0.0.1:8848/nacos
# 2.服务注册
nacos的注册中心(服务端)由可执行程序直接开启,不需要创建一个新的启动类,配置时springboot的yml文件仅仅需要改客户端的所有微服务
- 在父工程添加maven依赖
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId><version>2.2.6.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
2
3
4
5
6
- 注释掉order-service和user-service微服务中原有的eureka依赖。
- 微服务中添加nacos客户端依赖
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
2
3
4
- 微服务添加yml配置文件
spring:
cloud:
nacos:
server-addr: localhost:8848
2
3
4
# 3.集群属性
添加cluster-name属性
cloud:
nacos:
server-addr: localhost:8848
discovery:
cluster-name: HZ
2
3
4
5
nacos负载均衡规则,优先选择同一个集群的服务,本地没有则会跨集群访问。因此服务之间是可以跨集群调用的
userservice:
ribbon:
NFLoadBalancerRuleClassName: com.alibaba.cloud.nacos.ribbon.NacosRule
2
3
权重负载均衡:通过编辑微服务实例的权重来控制被访问概率,用户请求的越高,权重设置为0则不会被访问。(可以进行不关闭服务的版本升级,依次把一个个待升级更新的服务设置为0)
# 4.环境隔离
命名空间namespace,用来隔离不同环境(生产环境,测试环境),服务之间不能跨命名空间进行调用
修改微服务的application.yml,添加namespace并输出对应空间的id
cloud:
nacos:
server-addr: localhost:8848
discovery:
cluster-name: HZ
namespace: 6c95967a-3010-4b77-8333-48f1469f5a77
2
3
4
5
6
# 5.Eureka和Nacos区别
两者都支持服务注册和服务拉取,健康检测
Nacos的实例可以设置为临时实例和非临时实例,两者的健康检测方式不同:
- 临时实例是通过微服务临时实例向Nacos服务端发送心跳监测,如果异常(比如服务关闭了)则注册中心会直接删除
- 非临时实例是通过Nacos服务端向微服务非临时实例进行主动监测模式,异常不会被剔除
服务拉取上,Eureka每30秒消费者会进行一次拉取,如果期间存在修改,消费者是不知道的;而Nacos是通过消息推送模式,服务列表更新及时。

# 6.Nacos配置管理
配置管理服务:当微服务的配置需要改动时,不需要停掉关闭所有微服务进行改动,而只需要配置管理服务实现热更新。ID命名要微服务唯一,格式:微服务名-环境命名空间.ymal
整个步骤:项目启动->bootstrap.yml(nacos地址)->读取nacos配置文件->读取本地配置文件application.yml->创建spring容器->加载bean

- 引入配置管理客户端依赖
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
2
3
4
- 在userservice的资源目录添加一个bootstrap.yml文件,它是引导文件,优先级高于application.yml,其中的参数对应配置中心的[application]-profiles[active].file-extension。最后可能需要重启
spring:
application:
name: userservice
profiles:
active: dev
cloud:
nacos:
server-addr: localhost:8848
config:
file-extension: yaml
2
3
4
5
6
7
8
9
10
# 7.Nacos热更新
Nacos服务端更改配置中心的配置,无需关闭微服务,直接热更新到所有微服务上。
- 方法1:在usercontroller上添加注解@RefreshScope,然后通过@Value(${})获取
- 方法2:通过ConfigurationProperties注入,指定配置文件中前缀为prefix的所有属性绑定到类属性中。
@Data
@Component
@ConfigurationProperties(prefix = "pattern")
public class Patternproperties {
private String dateformat;
}
2
3
4
5
6
# 8.多环境共享
位于不同namespace命名空间环境的微服务,虽然配置中心的yaml在不同配置中心下可能不同,但是所有application.yaml都会共同进行加载。因此可以声明一个userservice.yaml里面管理共享变量。

当远端多个配置文件以及本地application.yaml包含相同属性时,优先级如下:
userservice-dev.yaml>userservice.yaml>application.yaml
# 9.Nacous集群
Nacos集群配置:
- conf->cluster.conf.example添加集群所有节点的ip和端口号
- 修改application.properties
server.port=8847
spring.datasource.platform=mysql //放开注释
db.num=1
db.url.0=jdbc:mysql://127.0.0.1:3306/nacos?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC
db.user.0=root
db.password.0=123
2
3
4
5
6
7
8
- 集群启动
.\startup.cmd
配置Nginx:
upstream nacos-cluster {
server 127.0.0.1:8845;
server 127.0.0.1:8846;
server 127.0.0.1:8847;
}
server {
listen 80;
server_name localhost;
location /nacos {
proxy_pass http://nacos-cluster;
}
}
2
3
4
5
6
7
8
9
10
11
12
微服务的bootstrap.yml文件的nacos服务端地址(填写nginx的地址和端口):
spring:
cloud:
nacos:
server-addr: localhost:80 # Nacos地址
2
3
4