SpringCloud学习:Spring Cloud Alibaba Nacos(服务注册中心、配置管理中心)

文章目录

  • [Spring Cloud Alibaba Nacos](#Spring Cloud Alibaba Nacos)
    • [1. 入门简介](#1. 入门简介)
    • [2. Nacos](#2. Nacos)

Spring Cloud Alibaba Nacos

1. 入门简介

  1. 由阿里提供的微服务开发的一站式解决方案(服务注册和发现、服务调用、服务熔断和降级、服务限流、网关)
  2. 介绍:阿里推出的致力于微服务开发的一站式解决方案 ,包含开发分布式应用 的必需组件
  3. 版本选择与说明:以github上的版本为主(官网更新不及时)
  4. 主要功能

2. Nacos

  1. 简介:服务注册中心和配置中心 (Consul)(独立于第三方 )
    1. Nacos:Dynamic Na ming and C onfiguration Service;官网:**www.nacos.io
    2. 介绍:一个更易于构建云原生应用 的动态服务发现、配置管理和服务管理中心
    3. Nacos默认是AP(性能),服务注册中心不是微服务 ,而是一个独立的微服务的第三方的服务注册中心项目 ,要在windows下运行开启,如consul agent -dev
    4. 服务注册组件的比较
  2. 下载和安装
    1. 去github上下载源码压缩包,要在windows上独立运行
    2. 解压安装包,直接运行bin目录下在命令行执行命令startup.cmd进行启动 ,默认服务器端口是8848 ,启动后直接输入localhost:8848 进行访问,默认账号密码都是nacos,在命令行输入shutdown.cmd进行关闭
  3. Nacos Discovery服务注册中心
    1. 注册微服务进入Nacos
      1. 建项目
      2. 改POM:引入Nacos的依赖,在官网找到正确的版本
      3. 写YML:配置自己的微服务端口号和名称 并对Nacos微服务进行配置,端口号是8848,如果使用配置中心,则必须要把Nacos的配置放到bootstrap.yml中,其会优先于application.yml进行配置
      4. 主启动:在主启动类上使用@EnableDiscovery注解进行标注以注册进入Nacos服务中心
      5. 业务类:使用方法根据微服务的名字调用服务提供者的方法
    2. 负载均衡
      1. Nacos是支持负载均衡 的,可以使用RestTemplate+LoadBalancer(用@LoadBalancer注解标注方法)或者OpenFeign(在yml中进行配置)来进行实现
      2. 复制微服务时可以不用copy代码 ,而是直接对微服务进行copy,右键微服务并点击copy ,然后修改微服务名 并配置一个参数即端口号就可实现微服务的复制!\[Pasted image 20241016125650.png]
  4. Nacos Config配置中心:实现中心化全局配置的动态变更 ,动态刷新RefresnScope 和全局广播通知
    1. 通过Nacos微服务 和spring.cloud.alibaba.config 实现全局配置 的动态变更,动态刷新
    2. 要先从配置中心拉取配置 ,当使用配置中心时,会有两个配置文件 ,一定要将与Nacos有关的配置文件放到bootstarp.yml中 ,将与微服务有关的配置放到application.yml中,先读取bootstarp.yml中Nacos的配置并读入全局配置
    3. 配置步骤
      1. 建项目
      2. 改POM:要引入discovery、config、bootstarp的POM依赖
      3. 写yml:bootstrap.yml 、application.yml
        1. 要配置两个配置文件bootstarp和application,先从配置中心拉取配置
        2. 当要引入全局配置中心时,必须要在bootstarp的配置文件中对Nacos进行配置 ,因为其先从bootstarp.yml中读取配置文件 ,故一定要将Nacos的配置文件放到bootstrap文件中 ,然后将与微服务有关的配置放到application.yml中
      4. 主启动:要将微服务注册进入Nacos
      5. 业务类:使用 @RefreshScope 注解标注业务类以实现动态刷新配置
    4. 在Nacos中添加配置 :要在Nacos的微服务网站8848上创建配置信息(根据DataIa的格式创建,一个DataId对应一组相同名字的微服务) ,然后写了bootstarp.yml的微服务会自动读取对应的DataId
      1. DataId的组成格式 :每一个微服务名对应唯一的一个DataId ,一个DataId对应一组名字相同的微服务,必须根据DataId的格式来创建配置中心
        2. 在Nacos的配置中心添加配置信息时,必须根据提供的格式来创建DataID ,该配置会被自动加载到对应的微服务中,通过@Value(${config.info})来加载配置信息20241016132415.png]]
      2. 在Nacos中添加配置信息
        1. 创建好配置信息后点击发布 ,此时对应DataID的微服务就可以从Nacos中读取配置信息 ,并在业务类中通过@Value("{config.info}")来读取配置文件中的信息
        2. 创建配置信息时,配置格式 与DataID 以及bootstrap中配置的格式 必须三者相同三码合一
      3. 自动动态刷新:使用**@RefreshScope**注解在业务类上进行标注
      4. 历史配置 :Nacos会记录配置文件的历史版本 并默认保留30天,且支持一键回滚功能 ,一键回滚后会出发配置刷新
      5. 流程
        1. 当微服务配置了配置中心 时,会创建两个配置文件bootstrap.yml和application.yml ,必须将与Nacos相关的信息放入bootstrap.yml中 ,其余的放入application;当微服务启动时,会先读取bootstrap中的配置信息 ,且将配置中对应DataId的配置信息加载进入微服务 ,注册进入Nacos并根据DataID找对应的配置信息,如果存在则将配置信息读入微服务,然后再读取application中的配置,使用@Value("${config.info}")来读取Nacos中配置的信息
  5. Nacos数据模型之Namespace-Group-DataId(三元组唯一确定)
    1. 问题描述
      1. 多环境多项目时,怎么对配置信息进行管理!\[Pasted image 20241016134022.png]!\[Pasted image 20241016134014.png]
    2. Namespace-Group-DataId 三元组
      1. 在多项目多服务场景下,可以使用Namespace-Group-DataId对每个微服务的配置信息进行分类管理
      2. 不同的Namespace之间是隔离的 ,通过Group对微服务进行分组 ,每一个DataId对应一组微服务名相同的微服务
      3. 一个DataId对应一组名字相同的微服务,Namespace可以用来区分部署环境(dev\prod\test),Group可以对微服务进行分组
      4. 三者的作用
    3. Namespace-Group-DataId三种方案
      1. DataId方案:一个DataId对应一组名字相同的微服务
        1. DataId的格式:spring.cloud.application.name}-${spring.profile.active}.&{}
        2. 通过DataId的格式来配置每个微服务对应的DataId,并在Nacos中进行创建
相关推荐
别动我齐刘海8 分钟前
Linux 系统调试学习1
linux·运维·服务器·c++·学习·机器学习·机器人
高频因子挖掘机29 分钟前
只取最近 60 个交易日,却每次拉全历史:量化脚本变慢的原因与改法
后端·github·api
鬼手点金1 小时前
opencode-rules 插件
java·开发语言·前端·人工智能·chrome·git·github
孟健1 小时前
从5000亿Token到83%字节匹配:AI逆向工程与重构的工程闭环实践
后端·架构·ai编程
xier_ran2 小时前
【infra之路】AI 编译器学习笔记(二):重拾 C++——移动语义与 LLVM 风格的类型转换
人工智能·笔记·学习
paopaokaka_luck2 小时前
滑雪场管理系统(AI智能助手流式对话,ECharts 运营数据分析、教练、雪具与场地一体化预约,钱包支付退款、订单核销与服务评价)
java·人工智能·spring boot·网络协议·数据分析·echarts
码事漫谈2 小时前
丢得静悄悄,谈一谈 Agent 的记忆是怎么没的
后端
迪飞特科技2 小时前
智慧物业平台实战:Spring Boot 整合小程序实现报修巡检费用全流程
spring boot·后端·小程序
考虑考虑2 小时前
@JsonInclude注解使用
spring boot·后端·spring
Wang's Blog2 小时前
Java 项目实战: 交友项目 - Dubbo 的内部结构与一次调用的完整链路
java·dubbo