当前位置: 首页 > news >正文

五分钟学会Nacos

Nacos注册中心

nacos是阿里的注册中心

  1. 引入父工程依赖
<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. 注释原来eureka的依赖
  2. 添加nacos客户端依赖
<!--        nacos客户端依赖-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>

Nacos服务分级存储模型

在这里插入图片描述

服务调用尽可能选择本地集群的服务,跨集群调用延迟较高,本地集群不可访问时,再去访问其他集群

userserver:
  ribbon:
    NFLoadBalancerRuleClassName: com.alibaba.cloud.nacos.ribbon.NacosRule
  • 一级:服务,比如:userserver
  • 二级:集群,比如:杭州上海
  • 三级:实例,比如:杭州集群里部署了userserver的服务器
  cloud:
    nacos:
      server-addr: localhost:8848 #nacos服务地址
      discovery:
        cluster-name: HZ

加权负载均衡

实例的权重控制

  • Nacos控制台可以设置实例的权重值,0~1之间
  • 同集群内的多个实例,权重越高被访问的频率越高
  • 权重设置为0则完全不会被访问

环境隔离

namespace

相同的环境下才能互相访问,不同环境下就会隔离开,即:每个namespace都有唯一id,不同namespace下的服务不可见

如果不指定namespace,默认在public组里

  cloud:
    nacos:
      discovery:
        namespace: df1422b6-b616-4119-834e-b0082825fe02

在这里插入图片描述


nacos原理

在这里插入图片描述

跟eureka类似,都有心跳检测机制,但是是有区别

  • eureka:提供者每隔30s心跳检测一次
  • nacos:提供者分为两种:临时实例,非临时实例
    • 临时实例采用心跳检测,每隔5s主动发送一次,nacos15s没有收到检测会标记不健康,30s没收到会直接剔除该服务
    • 非临时实例由nacos主动询问是否在线,如果有问题,不会剔除,而是标记不健康,等待上线

nacos消费者拉取到服务信息会缓存,如果有消息变更,nacos会主动推送到消费者

总结

NacosEureka
服务注册支持支持
服务拉取支持,且能缓存支持
心跳检测支持,临时实例5s间隔支持,30s间隔
主动检测nacos会主动向非临时实例检测状态不支持
服务推送服务变更时主动推送不支持
集群模式默认采用AP方式,当集群中采用非临时实例时,采用CP模式采用AP方式

Nacos配置管理

配置统一管理

  1. 添加nacos配置管理

在这里插入图片描述

其中的配置内容不是全部的yaml,而是有热更新需求的内容

  1. 添加依赖
<!--        nacos配置管理客户端依赖-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
        </dependency>
  1. 添加bootstrap.yaml文件

在nacos的管理中心的配置需要:

  • 文件名:userserver-dev.yaml
  • 文件格式:yaml
  • 文件内容:xxx

所以bootstrap.yaml中也需要这些

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

所以现在springboot在加载的时候,会先从bootstrap.yaml中获取文件内容,再通过application.yaml获取内容


配置热更新

有两种实现方式:

  1. 在需要注入的类上加上:@RefreshScope
@RefreshScope
public class UserController {

    @Autowired
    private UserService userService;
    @Value("${pattern.dateformat}")
    private String dateformat;

    @GetMapping("/{id}")
    public User queryById(@PathVariable("id") Long id) {
        System.out.println(dateformat);
        return userService.queryById(id);
    }
}
  1. 搞一个配置类,用springboot自动装配的特性,自己去yaml中找:pattern:dateformat
@Data
@Component
@ConfigurationProperties(prefix = "pattern")
public class PatternProperties {
    private String dateformat;
}
 
public class UserController {
	@Autowired
    private PatternProperties patternProperties;
    @GetMapping("/{id}")
    public User queryById(@PathVariable("id") Long id) {
        System.out.println(patternProperties.getDateformat());
        return userService.queryById(id);
    }

多环境配置共享

在这里插入图片描述

如果不带dev说明没有环境限制,说明是多环境共享的。

多种配置的优先级:

nacos > 本地
环境配置 > 多环境配置
总结:
userserver-dev.yaml > userserver.yaml > idea:application.yaml

服务启动的时候会从nacos中读取两个文件:[服务名]-[环境].yaml 和 [服务名].yaml 例如:usersever-dev.yaml 和 userserver.yaml

如果不带dev说明没有环境限制,说明是多环境共享的。

多种配置的优先级:

nacos > 本地
环境配置 > 多环境配置
总结:
userserver-dev.yaml > userserver.yaml > idea:application.yaml

服务启动的时候会从nacos中读取两个文件:[服务名]-[环境].yaml 和 [服务名].yaml 例如:usersever-dev.yaml 和 userserver.yaml

相关文章:

  • 从零开始的AI绘画:MidJourney带你掌握AI绘画的基础和高级技巧
  • 封装,继承
  • 【前端架构】Angular,React,Vue那个是2023的最佳选择?
  • 特斯拉的操作系统是用什么语言编写的?
  • 自主HttpServer实现(C++实战项目)
  • 【数据库】什么是 PostgreSQL?开源数据库系统
  • 为什么基础矩阵F的自由度是7
  • 防火墙的NAT技术
  • Pyspark_结构化流3
  • 【云原生】Kubernetes(k8s)部署 MySQL+Dubbo+Nacos服务
  • Linux使用:环境变量指南和CPU和GPU利用情况查看
  • 自学大数据第13天~Hbase数据库操作
  • FPGA 20个例程篇:20.USB2.0/RS232/LAN控制并行DAC输出任意频率正弦波、梯形波、三角波、方波(三)
  • Java 基本数据类型
  • 做了个springboot接口参数解密的工具,我给它命名为万能钥匙(已上传maven中央仓库,附详细使用说明)
  • download使用浅析
  • Git同步原始仓库到Fork仓库中
  • JavaScript函数式编程(一)
  • Java知识点总结(JavaIO-打印流)
  • JS数组方法汇总
  • Less 日常用法
  • niucms就是以城市为分割单位,在上面 小区/乡村/同城论坛+58+团购
  • vue.js框架原理浅析
  • Vue官网教程学习过程中值得记录的一些事情
  • 翻译--Thinking in React
  • 浮现式设计
  • 复杂数据处理
  • 经典排序算法及其 Java 实现
  • 开放才能进步!Angular和Wijmo一起走过的日子
  • 使用Envoy 作Sidecar Proxy的微服务模式-4.Prometheus的指标收集
  • 推荐一款sublime text 3 支持JSX和es201x 代码格式化的插件
  • 小程序、APP Store 需要的 SSL 证书是个什么东西?
  • 新版博客前端前瞻
  • 阿里云ACE认证学习知识点梳理
  • ​3ds Max插件CG MAGIC图形板块为您提升线条效率!
  • ​渐进式Web应用PWA的未来
  • # 计算机视觉入门
  • #includecmath
  • #pragma pack(1)
  • #Ubuntu(修改root信息)
  • #我与虚拟机的故事#连载20:周志明虚拟机第 3 版:到底值不值得买?
  • (javascript)再说document.body.scrollTop的使用问题
  • (java版)排序算法----【冒泡,选择,插入,希尔,快速排序,归并排序,基数排序】超详细~~
  • (独孤九剑)--文件系统
  • (二)hibernate配置管理
  • (三)docker:Dockerfile构建容器运行jar包
  • (学习日记)2024.04.04:UCOSIII第三十二节:计数信号量实验
  • (转)JAVA中的堆栈
  • .jks文件(JAVA KeyStore)
  • .net core Swagger 过滤部分Api
  • .net FrameWork简介,数组,枚举
  • .NET基础篇——反射的奥妙
  • @staticmethod和@classmethod的作用与区别
  • [8-27]正则表达式、扩展表达式以及相关实战
  • [ACM] hdu 1201 18岁生日