Nacos-微服务注册中⼼(Nacos简介 Nacos配置管理)

news2024/9/8 22:55:58

目录

一、 微服务的注册中⼼

1. 注册中⼼的主要作⽤  

2. 常⻅的注册中⼼

二、Nacos简介 

nacos实战⼊⻔

1. 搭建nacos环境

2.将订单微服务注册到nacos

2.1 在pom.xml中添加nacos的依赖

2.2 在主类上添加@EnableDiscoveryClient注解

2.3 在application.yml中添加nacos服务的地址

2.4 启动服务, 观察nacos的控制⾯板中是否有注册上来的商品微服务

3. 将商品微服务注册到nacos

3.1 在pom.xml中添加nacos的依赖

3.2 在主类上添加@EnableDiscoveryClient注解

3.3 在application.yml中添加nacos服务的地址

3.4 启动服务, 观察nacos的控制⾯板中是否有注册上来的商品微服务

4. 实现下单

三、Nacos配置管理

1. 统⼀配置管理

1.1 在nacos中添加配置⽂件

1.2 从微服务拉取配置 

1.3 配置实现步骤:

1) 引⼊nacos-config依赖

2)添加bootstrap.yaml

3)在nacos中添加配置

4)测试

2. 配置热更新

2.1 方式一

2.2 ⽅式⼆

3. 配置共享

同服务内配置共享

测试dev

测试test

不同微服务共享配置

4. 配置共享的优先级


一、 微服务的注册中⼼

        注 册中⼼可以说是微服务架构中的”通讯录“ ,它记录了服务和服务地址的映射关系 。在分布式架构中, 服务会注册到这⾥,当服务需要调⽤其它服务时,就这⾥找到服务的地址,进⾏调⽤。

1. 注册中⼼的主要作⽤  

        服务注册中⼼(下称注册中⼼)是微服务架构⾮常重要的⼀个组件,在微服务架构⾥主要起到了协调者 的⼀个作⽤。 注册中⼼⼀般包含如下⼏个功能:
1. 服务发现:
  • 服务注册/反注册:保存服务提供者和服务调⽤者的信息
  • 服务订阅/取消订阅:服务调⽤者订阅服务提供者的信息,最好有实时推送的功能
  • 服务路由(可选):具有筛选整合服务提供者的能⼒。
2. 服务配置:
  • 配置订阅:服务提供者和服务调⽤者订阅微服务相关的配置
  • 配置下发:主动将配置推送给服务提供者和服务调⽤者

3. 服务健康检测:

  • 检测服务提供者的健康情况

2. 常⻅的注册中⼼

Zookeeper

        zookeeper它是⼀个分布式服务框架,是Apache Hadoop 的⼀个⼦项⽬,它主要是⽤来解决分布式应⽤中经常遇到的⼀些数据管理问题,如:统⼀命名服务、状态同步服务、集群管理、分布式应⽤配置项的管理等。简单来说zookeeper=⽂件系统+监听通知机制。

Eureka
        Eureka是在Java语⾔上,基于Restful Api开发的服务注册与发现组件,Springcloud Netflix中的重要组件
Consul
        Consul是由HashiCorp基于Go语⾔开发的⽀持多数据中⼼分布式⾼可⽤的服务发布和注册服务软件, 采⽤Raft算法保证服务的⼀致性,且⽀持健康检查。
Nacos
         Nacos是⼀个更易于构建云原⽣应⽤的动态服务发现、配置管理和服务管理平台。简单来说 Nacos 就是注册中⼼ + 配置中⼼的组合 ,提供简单易⽤的特性集,帮助我们解决微服务开发必会涉及到的服务注册与发现,服务配置,服务管理等问题。 Nacos 还是 Spring Cloud Alibaba 组件之⼀,负责服务注册与发现。
组件名语言CAP一致性算法服务健康检查对外暴露接口
EurekaJavaAP可配支持HTTP
ConsulGoCPRaft支持HTTP/DNS
ZookeeperJavaCPPaxos支持客户端
NacosJavaAPRaft支持HTTP
Eureka闭源影响
        在Euraka的GitHub上,宣布Eureka 2.x闭源。近这意味着如果开发者继续使⽤作为 2.x 分⽀上现有⼯作 repo ⼀部分发布的代码库和⼯件,则将⾃负⻛险。
Nacos替换⽅案

二、Nacos简介 

         Nacos 致⼒于帮助您发现、配置和管理微服务。Nacos 提供了⼀组简单易⽤的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据及流量管理。 nacos的作⽤就是⼀个注册中⼼,⽤来管理注册上来的各个微服务

nacos实战⼊⻔

我们就在现有的环境中加⼊nacos,并将我们的两个微服务注册上去。

1. 搭建nacos环境

第1步: 安装nacos
下载地址 : https://github.com/alibaba/nacos/releases
下载 zip 格式的安装包,然后进⾏解压缩操作
解压即安装
第2步: 启动nacos
#切换⽬录
cd nacos/bin
#命令启动
startup.cmd -m standalone
或者直接双击startup.cmd运⾏
第3步: 访问nacos
打开浏览器输⼊ http://localhost:8848/nacos ,即可访问服务, 默认密码是nacos/nacos

2.将订单微服务注册到nacos

开始修改 shop-product 模块的代码, 将其注册到nacos服务上

2.1 在pom.xml中添加nacos的依赖

 <!-- nacos客户端 -->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>

2.2 在主类上添加@EnableDiscoveryClient注解

@SpringBootApplication
@EnableDiscoveryClient
public class OrderApplication {

    public static void main(String[] args) {
        SpringApplication.run(OrderApplication.class);
    }

    @Bean
    public RestTemplate restTemplate() {
        return new RestTemplate();
    }
}

2.3 在application.yml中添加nacos服务的地址

server:
  port: 8091
spring:
  application:
    name: service-order
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql:///shop?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8&useSSL=true
    username: root
    password: 123456
  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848
spring:
  profiles:
    active: dev

这里我把dev分开写了  调用就行 也可以写一个里面

2.4 启动服务, 观察nacos的控制⾯板中是否有注册上来的商品微服务

3. 将商品微服务注册到nacos

开始修改 shop-product 模块的代码, 将其注册到nacos服务上

3.1 在pom.xml中添加nacos的依赖

<!-- nacos客户端 -->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>

3.2 在主类上添加@EnableDiscoveryClient注解

@SpringBootApplication
@EnableDiscoveryClient
public class ProductApplication {
    public static void main(String[] args) {
        SpringApplication.run(ProductApplication.class);
    }
}

3.3 在application.yml中添加nacos服务的地址

server:
  port: 8081
spring:
  application:
    name: service-product
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql:///shop?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8&useSSL=true
    username: root
    password: 123456
  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848

3.4 启动服务, 观察nacos的控制⾯板中是否有注册上来的商品微服务

4. 实现下单

三、Nacos配置管理

Nacos除了可以做注册中⼼,同样可以做配置管理来使⽤

1. 统⼀配置管理

        当微服务部署的实例越来越多,达到数⼗、数百时,逐个修改微服务配置就会让⼈抓狂,⽽且很容易出错。我们需要⼀种统⼀配置管理⽅案,可以集中管理所有实例的配置。 Nacos⼀⽅⾯可以将配置集中管理,另⼀⽅可以在配置变更时,及时通知微服务,实现配置的热更新。
在业界常⻅的服务配置中⼼,有下⾯这些:
  • Apollo是由携程开源的分布式配置中⼼。特点有很多,⽐如:配置更新之后可以实时⽣效,⽀持灰度发布功能,并且能对所有的配置进⾏版本管理、操作审计等功能,提供开放平台API。并且资料也写的很详细
  • Disconf是由百度开源的分布式配置中⼼。它是基于Zookeeper来实现配置变更后实时通知和⽣效的
  • SpringCloud Config这是Spring Cloud中带的配置中⼼组件。它和Spring是⽆缝集成,使⽤起来⾮常⽅便,并且它的配 置存储⽀持Git。不过它没有可视化的操作界⾯,配置的⽣效也不是实时的,需要重启或去刷新。
  • Nacos这是SpingCloud alibaba技术栈中的⼀个组件,前⾯我们已经使⽤它做过服务注册中⼼。其实它也集成了服务配置的功能,我们可以直接使⽤它作为服务配置中⼼。

1.1 在nacos中添加配置⽂件

1.2 从微服务拉取配置 

        微服务要拉取nacos中管理的配置,并且与本地的application.yml配置合并,才能完成项⽬启动。 但如果尚未读取application.yml,⼜如何得知nacos地址呢?
        因此spring引⼊了⼀种新的配置⽂件: bootstrap.yaml⽂件,会在application.yml之前被读取,流程如下:

1.3 配置实现步骤:

1) 引⼊nacos-config依赖
        <!--nacos配置中心-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
        </dependency>

在商品 和订单都添加坐标

2)添加bootstrap.yaml

不能使⽤原来的application.yml作为配置⽂件,⽽是新建⼀个bootstrap.yml作为配置⽂件
配置⽂件优先级(由⾼到低):
bootstrap.properties -> bootstrap.yml -> application.properties -> application.yml
spring:
  application:
    name: service-product
  cloud:
    nacos:
      config:
        server-addr: 127.0.0.1:8848 #nacos中心地址
        file-extension: yaml # 配置文件格式
        shared-dataids: datasource.yaml # 配置要引⼊的配置
        refreshable-dataids: datasource.yaml # 配置要实现动态配置刷新的配置
  profiles:
    active: dev # 环境标识,开发环境
3)在nacos中添加配置

4)测试

加载成功

2. 配置热更新

        我们最终的⽬的,是修改nacos中的配置后,微服务中⽆需重启即可让配置⽣效,也就是配置热更新。要实现配置热更新,可以使⽤两种⽅式:

配置中⼼添加配置

config:
 appName: product

2.1 方式一

在@Value注⼊的变量所在类上添加注解@RefreshScope:
@RestController
@RefreshScope//只需要在需要动态读取配置的类上添加此注解就可以
public class ProductController {

    @Value("${config.appName}")
    private String appName;

    @GetMapping("/nacos-config-test1")
    public String nacosConfingTest1() {
        return appName;
    }

如果修改的话 不需要重启服务 直接在配置中心修改配置文件即可

2.2 ⽅式⼆

硬编码⽅式

@RestController
public class NacosConfigController {
 @Autowired
 private ConfigurableApplicationContext applicationContext;
 
 @GetMapping("/nacos-config-test2")
 public String nacosConfingTest2() {
 return applicationContext.getEnvironment().getProperty("config.app
Name");
 }
}

测试不测了

3. 配置共享

        当配置越来越多的时候,我们就发现有很多配置是重复的,这时候就考虑可不可以将公共配置⽂件提取出来

同服务内配置共享

实现步骤:
  • 1. 新建⼀个以 spring.application.name 命名的配置⽂件,然后将其所有环境的公共配置放在⾥⾯
  • 2. 新建⼀个名为service-product-test.yaml配置存放测试环境的配置
  • 3. 新建⼀个名为service-product-dev.yaml配置存放开发环境的配置
  • 4. 在两个环境⽂件中配置独有信息
  • 5. 添加测试⽅法
    @RestController
    @RefreshScope//只需要在需要动态读取配置的类上添加此注解就可以
    public class ProductController {
    
    //    @Value("${config.appName}")
    //    private String appName;
    //
    //    @GetMapping("/nacos-config-test1")
    //    public String nacosConfingTest1() {
    //        return appName;
    //    }
    //
        @Value("${config.env}")
        private String env;
    
        //同一微服务的不同环境下共享配置
        @GetMapping("/nacos-config-test2")
        public String nacosConfingTest2() {
            return env;
        }
    }

测试dev
测试test

不同微服务共享配置

        不同服务之间实现配置共享的原理类似于⽂件引⼊,就是定义⼀个公共配置,然后在当前配置中引⼊

1. 在nacos中定义⼀个DataID为datasource.yaml的配置,⽤于所有微服务共享

2. 修改bootstrap.yaml

spring:
  application:
    name: service-product
  cloud:
    nacos:
      config:
        server-addr: 127.0.0.1:8848 #nacos中心地址
        file-extension: yaml # 配置文件格式
        shared-dataids: datasource.yaml # 配置要引⼊的配置
        refreshable-dataids: datasource.yaml # 配置要实现动态配置刷新的配置
  profiles:
    active: dev # 环境标识,开发环境

3. 启动商品微服务进⾏测试

4. 配置共享的优先级

当nacos、服务本地同时出现相同属性时,优先级有⾼低之分:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1957630.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

如何在Linux上构建Raspberry Pi虚拟环境

目录 前置环境需求 Older Version 新版本启动 下面我们来讲讲如何使用QEMU来仿照树莓派环境。这里首先先分成两大类。第一类是跑比较老的&#xff0c;安全性较低的老树莓派&#xff0c;主要指代的是22年4月份发布之前的版本&#xff0c;这个版本当中&#xff0c;树莓派镜像自…

Layui表格合并、表格折叠树

1、核心代码&#xff1a; let tableMerge layui.tableMerge; // 引入合并的插件&#xff0c;插件源文件在最后let tableData [{pid: 0,cid: 111,sortNum: 1, // 序号pName: 数据父元素1,name: 数据1,val: 20,open: true, // 子树是否展开hasChild: true, // 有子数据opt: 数据…

昇思25天学习打卡营第1天 | 快速入门教程

昇思大模型平台&#xff0c;就像是AI学习者和开发者的超级基地&#xff0c;这里不仅提供丰富的项目、模型和大模型体验&#xff0c;还有一大堆经典数据集任你挑。 AI学习有时候就像找不到高质量数据集的捉迷藏游戏&#xff0c;而且本地跑大数据集训练模型简直是个折磨&#xf…

react css module 不生效问题记录

背景&#xff1a;自己使用webpackreactcssless配置的项目框架&#xff0c;在使用过程中发现css module引入不生效。 import React from react import styles from ./index.module.less console.log(styles)//输出 undefinedwebpack配置了css-loader,less-loader,webpack默认cs…

Linux系统之dns服务配置

要求&#xff1a;DNS服务器域解析 www. 11zzj.com为192.168.11.1; ftp.11zzj.com 为192.168.11.2; mail.11zzj.com 为172.16.11.20; 1.打开Linux6&#xff08;服务器&#xff09;和Linux5&#xff08;客户端&#xff09; 配置IP地址和DNS 地址&#xff0c;并ping通。…

PSINS工具箱函数介绍——kfinit

kfinit是kf的参数初始化函数&#xff0c;用于初始化滤波参数 本文所述的代码需要基于PSINS工具箱&#xff0c;工具箱的讲解&#xff1a; PSINS初学指导基于PSINS的相关程序设计&#xff08;付费专题&#xff09; 使用方法 kfinit这个函数的字面意思是&#xff1a;kf的初始化…

游戏制作中没想明白的事情

当一个备忘录&#xff0c;有的是还没有时间去深入研究&#xff0c;或者没有从头了解 什么是建模绑定&#xff1f;为什么人物建模&#xff0c;初始化都是双手打开的&#xff1f;平着放武器&#xff0c;但运行的时候武器会自动竖起来&#xff0c;这是怎么做到的&#xff1f; 思…

嵌入式学习Day13---C语言提升

目录 一、二级指针 1.1.什么是二级指针 2.2.使用情况 2.3.二级指针与数组指针 二、指针函数 2.1.含义 2.2.格式 2.3.注意 2.4.练习 三、函数指针 3.1.含义 3.2.格式 3.3.存储 3.4.练习 ​编辑 四、void*指针 4.1.void缺省类型 4.2.void* 4.3.格式 4.4.注…

RocketMQ的详细讲解(四种mq的对比(activeMq、rabbitmq、rocketmq、kafka))

20240729 RocketMQ1 mq的三大作用 异步、削峰限流、解耦合2. 四种mq的对比&#xff08;activeMq、rabbitmq、rocketmq、kafka&#xff09;3 rocketmq特点1. 平台无关2. 能提供什么样的功能 4 rocketMq4.1 broker中的标题&#xff0c;来约束读和写4.2 rocketmq的结构4.3 读和写的…

AJAX概念与axios使用

一、什么是AJAX&#xff1f; 定义&#xff1a;AJAX 是异步的 JavaScript和XML(Asynchronous JavaScript And XML)。简单点说&#xff0c;就是使用XMLHttpRequest 对象与服务器通信。 它可以使用 JSON&#xff0c;XML&#xff0c;HTML 和 text 文本等格式发送和接收数据。AJAX最…

Java 内推 | 教育行业缺口来了,研发,运维,产品,教研,职能,营销... 别错过

Java 内推 | 教育行业缺口来了&#xff0c;研发&#xff0c;运维&#xff0c;产品&#xff0c;教研,职能&#xff0c;营销… 别错过 岗位职责&#xff1a; 1、根据公司战略及业务规划&#xff0c;参与部门业务架构分析与设计&#xff0c;包含规划立足当前、面向未来的应用架构…

嵌入式C++、STM32、ROS系统和MQTT协议通讯:智能农业灌溉系统项目设计思路(代码示例)

目录 项目概述 系统设计 硬件设计 软件设计 系统架构图 代码实现 1. STM32微控制器代码 1.1 STM32初始化代码 1.2 读取土壤湿度 1.3 MQTT数据发送 1.4 接收控制命令 1.5 主循环 2. ROS系统代码 2.1 创建ROS节点 2.2 控制水泵的逻辑 3. ROS与MQTT的集成 3.1 安…

MySQL 执行计划详解

文章目录 一. 概念二. 语法三. 详解各字段1. id2. select_type3. table4. partitions5. type6. possible_keys与key7. key_len8. ref9. rows10. filtered11. Extra 一. 概念 有了慢查询后&#xff0c;需要对慢查询语句进行分析。一条查询语句经过MySQL查询优化器后&#xff0c…

最全国内13家DNS分享 解决网页被恶意跳转或无法打开问题

腾讯 DNS (DNSPod) 腾讯 DNS 是由 DNSPod 提供的公共免费 DNS 服务。DNSPod 已被腾讯收购&#xff0c;现在属于腾讯公司所有。该 DNS 服务稳定性和连通性良好&#xff0c;经测试在海外也可以使用。 DNSPod 提供了 IPv4、IPv6 DNS 和 DoT/DoH 服务。 IPv4 地址: 119.29.29.29…

fastapi教程(五):中间件

一&#xff0c;什么是中间件 中间件是一种软件组件&#xff0c;它在请求到达应用程序处理程序之前和/或响应发送回客户端之前执行操作。 请求从客户端发出。 请求首先经过Middleware 1。 然后经过Middleware 2。 请求到达FastAPI路由处理器。 响应从路由处理器返回。 响应经过…

精品PPT | 云原生大数据平台构建及落地实践.pptx

1、监控和可观测性的关系及渊源 2、当前阶段落地可观测性的挑战在哪里 3、落地好一个可观测系统的三大要素 4、面向故障处理过程的可观测性体系建设案例 5、思考&#xff1a;人工智能2.0对可观测性技术和产品演进的影响

鸿蒙开发—黑马云音乐之Music页面

目录 1.外层容器效果 2.信息区-发光效果 3.信息区-内容布局 4.播放列表布局 5.播放列表动态化 6.模拟器运行并配置权限 效果&#xff1a; 1.外层容器效果 Entry Component export struct MuiscPage {build() {Column() {// 信息区域Column() {}.width(100%)// .backgroun…

环形链表 II - 力扣(LeetCode)C语言

142. 环形链表 II - 力扣&#xff08;LeetCode&#xff09; (点击前方链接即可查看题目) 给定一个链表的头节点 head &#xff0c;返回链表开始入环的第一个节点。 如果链表无环&#xff0c;则返回 null。 如果链表中有某个节点&#xff0c;可以通过连续跟踪 next 指针再次到达…

制造企业选型MES管理系统时需要关注的地方

在当今制造业全面拥抱数字化转型的浪潮中&#xff0c;MES管理系统解决方案的角色日益凸显&#xff0c;成为提升生产效率、优化资源配置的关键工具。对于制造企业而言&#xff0c;选择一款合适的MES管理系统不仅关乎当前的生产管理需求&#xff0c;更直接影响到企业未来的竞争力…

【React】详解classnames工具:优化类名控制的全面指南

文章目录 一、classnames的基本用法1. 什么是classnames&#xff1f;2. 安装classnames3. 导入classnames4. classnames的基本示例 二、classnames的高级用法1. 动态类名2. 传递数组3. 结合字符串和对象4. 结合数组和对象 三、实际应用案例1. 根据状态切换类名2. 条件渲染和类名…