Nacos学习笔记

目录

一、Nacos的启动

在D:\java\nacos\bin处调出cmd窗口(根据电脑中nacos位置决定)

输入Windows命令:

回车启动

二、Nacos注册中心

服务注册到Nacos

1. 在cloud-demo父工程中添加spring-cloud-alibaba的管理依赖:

2. 注释掉order-service和user-service中原有的eureka依赖。

3. 添加nacos的客户端依赖:

4. 添加yml配置,配置nacos的服务地址

5. 总结

服务集群属性

1. 修改application.yml,添加如下内容:

2. 在Nacos可以看到集群变化:

3. 总结

根据集群负载均衡

1. 修改order-service中的application.yml,设置集群为HZ:

2. 在order-service中设置负载均衡的IRule为NacosRule,这个规则优先会寻找与自己同集群的服务:

3. 注意将user-service的权重都设置为1

4. 总结

根据权重负载均衡

1. 在Nacos控制台可以设置实例的权重值,选中实例后面的编辑按钮

2. 设置权重值0~1之间,测试可以发现10087被访问的频率大大降低

3. 实例的权重控制

环境隔离

1. 创建命名空间namespace

第一步:

第二步:

创建成功

2. 将order-service添加到新的命名空间中,与user-service实现环境隔离

3. Nacos环境隔离

临时实例和非临时实例

Nacos与Eureka的异同

1. Nacos与Eureka的共同点

2. Nacos与Eureka的区别

统一配置管理

1. Nacos的操作

2. 配置读取

3. 将配置交给Nacos管理的步骤

配置自动刷新

1. 配置方法

2. 总结:

多环境配置共享

1. 多环境配置

2. 多种配置的优先级


一、Nacos的启动

  1. 在D:\java\nacos\bin处调出cmd窗口(根据电脑中nacos位置决定)
  2. 输入Windows命令:

startup.cmd -m standalone

  1. 回车启动

启动成功,如下图所示

注意:默认Nacos的登录账号和密码均为nacos

二、Nacos注册中心

服务注册到Nacos
1. 在cloud-demo父工程中添加spring-cloud-alibaba的管理依赖:
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-alibaba-dependencies</artifactId>
    <version>2.2.5.RELEASE</version>
    <type>pom</type>
    <scope>import</scope>
</dependency>
2. 注释掉order-service和user-service中原有的eureka依赖。
3. 添加nacos的客户端依赖:
<!--eureka客户端依赖-->
<!--<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>-->
​
<!--nacos客户端依赖-->
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
4. 添加yml配置,配置nacos的服务地址
spring:
  cloud:
    nacos:
      server-addr: localhost:8848 # nacos服务地址
5. 总结
  1. Nacos服务搭建

① 下载安装包

② 解压

③ 在bin目录下运行指令

  1. Nacos服务注册或发现

① 引入nacos.discovery一脸

② 配置nacos地址spring.cloud.nacos.server-addr

服务集群属性
1. 修改application.yml,添加如下内容:
spring:
  datasource:
    url: jdbc:mysql://localhost:3306/cloud_user?useSSL=false
    username: root
    password: abc123
    driver-class-name: com.mysql.cj.jdbc.Driver
  application:
    name: userservice
  cloud:
    nacos:
      server-addr: localhost:8848 # nacos服务地址
      discovery:
        cluster-name: HZ # 配置集群名称,也就是机房位置,例如:HZ,杭州
2. 在Nacos可以看到集群变化:

3. 总结
  1. Nacos服务分级存储模型

① 一级是服务,例如userservice

② 二级是集群,例如杭州或上海

③ 三级是实例,例如杭州机房的某台部署了userservice的服务器

  1. 如何设置实例的集群属性

修改application.yml文件,添加spring.cloud.nacos.discovery.cluster-name属性即可

根据集群负载均衡
1. 修改order-service中的application.yml,设置集群为HZ:
spring:
  cloud:
    nacos:
      server-addr: localhost:8848 # nacos服务端地址
      discovery:
        cluster-name: HZ # 配置集群名称
2. 在order-service中设置负载均衡的IRule为NacosRule,这个规则优先会寻找与自己同集群的服务:

优先在同集群中随机访问

user-service:
  ribbon:
    NFLoadBalancerRuleClassName: com.alibaba.cloud.nacos.ribbon.NacosRule # 负载均衡规则
3. 注意将user-service的权重都设置为1
4. 总结

① 优先选择同集群服务实例列表

② 本地集群找不到提供者,才去其他集群寻找,并且会报警告

③ 确定了可用实例列表后,在采用随机负载均衡挑选实例

根据权重负载均衡
1. 在Nacos控制台可以设置实例的权重值,选中实例后面的编辑按钮

2. 设置权重值0~1之间,测试可以发现10087被访问的频率大大降低

3. 实例的权重控制

① Nacos控制台可以设置实例的权重值,0~1之间

② 同集群内的多个实例,权重越高被访问的频率越高

③ 权重设置为0,则完全不会被访问(可用于版本升级)

环境隔离
1. 创建命名空间namespace
第一步:

第二步:

创建成功

命名空间ID自动通过UUID方式生成唯一ID

2. 将order-service添加到新的命名空间中,与user-service实现环境隔离
spring:
  datasource:
    url: jdbc:mysql://localhost:3306/cloud_order?useSSL=false
    username: root
    password: abc123
    driver-class-name: com.mysql.cj.jdbc.Driver
  application:
    name: orderservice
  cloud:
    nacos:
      server-addr: localhost:8848
      discovery:
        cluster-name: HZ
        namespace: ee0e6185-2298-4287-9f32-0b42aab86149 # 命名空间ID
3. Nacos环境隔离

① namespace用来做环境隔离

② 每个namespace都有唯一的ID

③ 不同的namespace下的服务不可见

临时实例和非临时实例

服务注册到Nacos时,可以选择注册为临时或非临时实例,通过下面的配置来设置:

spring:
  application:
    name: orderservice
  cloud:
    nacos:
      server-addr: localhost:8848
      discovery:
        cluster-name: HZ
        namespace: ee0e6185-2298-4287-9f32-0b42aab86149 # 命名空间ID
        ephemeral: false # 设置是否为临时实例

默认,ephemeral的值为true,即默认为临时实例

Nacos与Eureka的异同
1. Nacos与Eureka的共同点

① 都支持服务注册和服务拉取

② 都支持服务提供者心跳方式做健康检测

2. Nacos与Eureka的区别

① Nacos支持服务端主动检测提供者状态;临时实例采用心跳模式,非临时实例采用主动检测模式

② 临时实例心跳不正常会被剔除,非临时实例则不会被剔除

③ Nacos支持服务列表变更的消息推送模式,服务列表更新更加及时

④ Nacos集群默认采用AP方式,当集群中存在非临时实例时,采用CP模式;Eureka采用AP方式

统一配置管理
1. Nacos的操作

在Nacos中添加配置信息:

在弹出表单中填写配置信息:

2. 配置读取

配置获取的步骤如下:

① 引入Nacos的配置管理客户端依赖

<!--nacos配置管理依赖-->
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>

② 在userservice中的resource目录添加一个bootstrap.yml文件,这个文件时引导文件,优先级高于application.yml,即项目启动时先去读取bootstrap.yml文件

spring:
  application:
    name: userservice # 服务名称
  profiles:
    active: dev # 开发环境
  cloud:
    nacos:
      server-addr: localhost:8848 # Nacos地址
      config:
        file-extension: yaml # 文件后缀名

③ 在user-service中将pattern.dateformat这个属性注入到UserController中做测试

@Slf4j
@RestController
@RequestMapping("/user")
public class UserController {
    /**
     * 注入nacos中的配置属性
     */
    @Value("${pattern.dateformat}")
    private String dateformat;
​
    /**
     * 测试能否读取到Nacos的配置
     *
     * @return 当前时间
     */
    @GetMapping("/now")
    public String now() {
        if (dateformat == null) {
            return "未能读取到Nacos的配置";
        }
        String now = LocalDateTime.now().format(DateTimeFormatter.ofPattern(dateformat));
        log.info("当前时间为:{}", now);
        return now;
    }
}
3. 将配置交给Nacos管理的步骤

① 在Nacos中添加配置文件

② 在微服务中引入nacos的config依赖

③ 在微服务中添加bootstrap.yml,配置nacos地址、当前环境、服务名称、文件后缀名。这些决定了程序启 动时去nacos读取那个文件

配置自动刷新
1. 配置方法

Nacos中的配置文件变更后,微服务无需重启就可以感知。不过需要通过下面两种配置实现:

  • 方式一:在@Value注入的变量所在类上添加注解@RefreshScope

    @Slf4j
    @RestController
    @RequestMapping("/user")
    @RefreshScope
    public class UserController {
    ​
        @Autowired
        private UserService userService;
    ​
        /**
         * 测试能否读取到Nacos的配置
         */
        @Value("${pattern.dateformat}")
        private String dateformat;
    }
  • 方式二:使用@ConfigurationProperties注解

    @Component
    @Data
    @ConfigurationProperties(prefix = "pattern")
    public class PatternProperties {
        private String dateformat;
    }
2. 总结:

Nacos配置更改后,微服务可以实现热更新,方法:

① 通过@Value注解注入,需要结合@RefreshScope来刷新

② 通过@ConfigurationProperties注入,无需@RefreshScope,自动刷新

注意事项:

  • 不是所有的配置都适合放到配置中心,维护起来比较麻烦

  • 建议将一些关键参数,需要运行时调整的参数放到nacos配置中心,一般都是自定义配置

多环境配置共享
1. 多环境配置

微服务启动时会从nacos读取多个配置文件:

  • [spring.application.name]-[spring.profiles.active].yaml,例如:userservice-dev.yaml

  • [spring.application.name].yaml,例如userservice.yaml

无论profile如何变化,[spring.application.name].yaml这个文件一定会加载,因此多环境配置可以写入这个文件

2. 多种配置的优先级

服务名-profile.yaml > 服务名.yaml > 本地配置

  • 20
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值