• Nacos注册中心


    一、认识和安装Nacos

    认识Nacos
    Nacos是阿里巴巴的产品,现在是springCloud中的一个组件,相比Eureka功能更加丰富,在国内受欢迎程度较高。

    Nacos安装
    链接:https://pan.baidu.com/s/14lIotaIp7mnNANAZjfciwA
    提取码:GY66

    启动Nacos并登录启动命令:.\startup.cmd -m standalone ;用户名密码默认均为nacos
    在这里插入图片描述

    二、Nacos快速入门

    服务注册到Nacos

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

     <!-- nacos管理依赖-->
            <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>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

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

    3、添加nacos的客户端依赖

    <!--nacos客户端依赖-->
            <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
            </dependency>
    
    • 1
    • 2
    • 3
    • 4
    • 5

    4、修改user-service中的application.yml文件,注释eureka地址,添加nacos地址

    cloud:
        nacos:
          server-addr: localhost:8848 #nacos服务地址
    
    • 1
    • 2
    • 3

    5、启动测试
    在这里插入图片描述

    三、Nacos服务分级存储模型

    ① 一级是服务
    ② 二级是集群,例如不同区域(上海、杭州…)
    ③ 三级是实例,例如某区域机房的某台部署了user service的服务器

    部署集群(容灾)
    在这里插入图片描述

    服务跨集群调用问题

    在这里插入图片描述

    服务集群属性配置

    1、修改application.yml(springcloud下),添加内容,启动不同的集群服务

    discovery:
            cluster-name: HZ  #集群名称,ZH (杭州)
    
    • 1
    • 2

    2、Nacos控制台可以看到集群变化
    在这里插入图片描述

    能否实现order-service远程调用user-service时优先选择本地集群???

    1、设置order-service集群属性并启动(修改yml文件)【 部署同集群(HZ)
    在这里插入图片描述

    多次访问查询业务,查看日志发现不同的服务均被访问,因此order-service发起远程调用时并未优先选择同集群的服务【依然采用轮询机制方案

    服务在选择实例时规则是由负载均衡的规则决定的

    四、NacosRule负载均衡

    根据集群负载均衡

    (此时可实现优先访问本地集群)

    在order-service中设置负载均衡的IRule为NacosRule

    userservice:  #要配置的微服务的名称
       ribbon:
         NFLoadBalancerClassName: com.alibaba.cloud.nacos.ribbon.NacosRule
    
    • 1
    • 2
    • 3

    NacosRule负载均衡特点
    优先选择本地集群,本地集群内的多个服务则再采用随机方式进行负载均衡

    根据权重负载均衡

    将user-service的权重都设置为1

     在实际部署中会出现这样的场景:
     ● 服务器设备性能有差异,部分实例所在机器性能较好,另一些较差,我们希望性能好的机器承担更多的用户请求
    
    • 1
    • 2

    Nacos提供了权重配置来控制访问频率,权重越大则访问频率越高

    1、在Nacos控制台可以设置实例的权重值,首先选中实例后面的编辑按钮
    在这里插入图片描述

    2、将权重设置为0.1,测试可以发现8081被访问到的频率大大降低
    在这里插入图片描述
    注意:当设置权重为0时,则此服务不会被访问可进行版本升级

    五、环境隔离——namespace

    Nacos中服务存储和数据存储的最外层都是一个名为namespace的东西,用来做最外层隔离(Nacos默认public为命名空间)
    在这里插入图片描述

    1、新建命名空间
    在这里插入图片描述

    2、修改服务命名空间(在order-service的application.yml,添加namespace)
    在这里插入图片描述

    成功添加到dev环境中在这里插入图片描述
    注意:此时order-service已不能访问user-service,不同namespace下的服务不可见服务若要实现访问应处于相同的环境下

    六、Nacos配置管理

    统一配置管理

    配置获取步骤
    在这里插入图片描述

    新建配置管理(有热更新需求的)
    eg:日期模板
    在这里插入图片描述

    微服务配置拉取

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

    <!--nacos配置管理依赖-->
            <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
            </dependency>
    
    • 1
    • 2
    • 3
    • 4
    • 5

    ②:在user-service中的resource目录添加一个bootstrap.yml文件,这个文件是引导文件,优先级高于application.yml

    spring:
      application:
        name: userservice  #服务名称
      profiles:
        active: dev   #开发环境,这里是dev
      cloud:
        nacos:
          server-addr: localhost:8848   #Nacos地址
          config:
            file-extension: yaml  #文件后缀名
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    检验是否可成功拉取到配置

    @Slf4j
    @RestController
    @RequestMapping("/user")
    public class UserController {
    
        @Autowired
        private UserService userService;
    
        @Value("${pattern.dateformat}")
        private String dateformat;
    
        /**
         * 路径: /user/110
         *
         * @param id 用户id
         * @return 用户
         */
        @GetMapping("/{id}")
        public User queryById(@PathVariable("id") Long id) {
            return userService.queryById(id);
        }
    
    
        @GetMapping("now")
        public  String now(){
            return LocalDateTime.now().format(DateTimeFormatter.ofPattern(dateformat));
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28

    配置拉取成功!!!
    在这里插入图片描述

    配置热更新

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

    配置自动刷新
    ● 方式一: 在@Value注入的变量所在类上结合注解@RefreshScope刷新
    在这里插入图片描述

    ● 方式二: 使用@ConfigurationProperties注解,自动刷新
    在这里插入图片描述
    注意事项

    ●不是所有的配置都适合放到配置中心,维护起来比较麻烦;
    ●建议将一些关键参数,需要运行时调整的参数放到nacos配置中心,一般都是自定义配置
    
    • 1
    • 2

    配置共享

    多环境配置共享(eg:某配置属性在开发、生产、测试等环境下值相同)

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

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

    ● [spring.application.name].yaml,例如:userservice.yaml

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

    在这里插入图片描述

    多种环境配置的优先级:
    ● 服务名-profile.yaml > 服务名称.yaml > 本地配置

    搭建Nacos集群

    Nacos生产环境下一定要部署为集群状态

    步骤:
    ● 搭建数据库,初始化数据库表结构
    ● 下载nacos安装包
    ● 配置nacos
    ● 启动nacos集群
    ● nginx反向代理

  • 相关阅读:
    spring 理解
    ElasticSearch使用
    转码(BIN→ASIIC/BIN→BCD)
    阿里云存储解决方案,助力轻舟智航“将无人驾驶带进现实”
    洗眼镜超声波清洗机用什么水清洗、小型超声波清洗机推荐
    最优化方法——Matlab实现黄金分割法一维搜索
    常用linux解压命令
    tcpdump wireshark简单使用
    【WEB前端2024】开源智体世界:乔布斯3D纪念馆-第30课-门的移动动画
    CADD课程学习(3)-- 靶点药物相互作用
  • 原文地址:https://blog.csdn.net/m0_56188609/article/details/126671761