首页 > 其他分享 >Nacos-微服务注册中⼼(Nacos简介 Nacos配置管理)

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

时间:2024-07-28 22:26:41浏览次数:12  
标签:服务 简介 配置 配置管理 Nacos nacos 添加 注册

目录

一、 微服务的注册中⼼

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、服务本地同时出现相同属性时,优先级有⾼低之分:

标签:服务,简介,配置,配置管理,Nacos,nacos,添加,注册
From: https://blog.csdn.net/qq_52897007/article/details/140710764

相关文章

  • HarmonyOS瀑布流的实现-------唐朝诡事录人物简介
    HarmonyOS瀑布流的实现介绍功能介绍代码结构页面布局数据结构类瀑布流数据数组瀑布流数据资源瀑布流组件中子组件的构建瀑布流效果的实现介绍当下的大多数产品中瀑布流是一种非常常见的组件,本文将介绍关于waterflow的图片浏览功能介绍使用瀑布流实现图片展示如下......
  • Linux Kernel CFI机制简介及测试禁用
    PS:要转载请注明出处,本人版权所有。PS:这个只是基于《我自己》的理解,如果和你的原则及想法相冲突,请谅解,勿喷。环境说明  无前言  当我们为android移植linux的驱动程序的时候,总会遇到一些错误,这些错误有一部分就是android内核开启的安全的机制导致的。本文就会介绍一种......
  • 【libevent】libevent简介
    1、Libevent1.1简介Libevent是一个用C语言编写的、轻量级的开源高性能事件驱动网络库。基本的socket编程是阻塞/同步的,每个操作除非已经完成或者出错才会返回,这样对于每一个请求,要使用一个线程或者单独的进程去处理,系统资源没法支撑大量的请求,于是各系统分别提出了基于异步/c......
  • DataX(一):DataX简介
    1.什么是DataXDataX是阿里巴巴开源的一个异构数据源离线同步工具,致力于实现包括关系型数据库(MySQL、Oracle等)、HDFS、Hive、ODPS、HBase、FTP等各种异构数据源之间稳定高效的数据同步功能。2.DataX的设计为了解决异构数据源同步问题,DataX将复杂的网状的同步......
  • KALI LINXU简介
    KaliLinux,这个名字听起来是不是有点像是来自遥远星球的神秘语言?哈哈,其实它是一种非常酷的操作系统,专门为网络安全和渗透测试设计的。下面,就让我来给你介绍一下这个神奇的KaliLinux吧!什么是KaliLinux?KaliLinux,基于DebianLinux,是一个开源的操作系统,由OffensiveSecurity的......
  • 缓存的简介以及Mybatis缓存中一级缓存和二级缓存
    简介我们所有的查询都需要连接数据库,连接数据库比较耗资源,那么如何解决耗资源的问题呢?    我们可以把一次查询的结果暂存在一个可以直接取到的地方——>内存    放在内存里的这一些查询的数据就叫缓存,这是什么意思呢,我们再次查询相同数据的时     ......
  • 2024年最新STM32单片机简介
    一、STM32简介    STM32是ST公司基于ARMCortex-M内核开发的32位微控制器。    STM32常应用在嵌入式领域,如智能车、无人机、机器人、无线通信、物联网、工业控制、娱乐电子产品等。    STM32功能强大、性能优异、片上资源丰富、功耗低,是一款经典的......
  • 深度学习1-简介
    人工智能(AI)旨在打造模仿智能行为的系统。它覆盖了众多方法,涵盖了基于逻辑、搜索和概率推理的技术。机器学习是AI的一个分支,它通过对观测数据进行数学模型拟合来学习决策制定。这个领域近年来迅猛发展,现在几乎(虽不完全准确)与AI同义。深度神经网络是一类机器学习模型,将其......
  • SpringCloud Alibaba - nacos服务自动注册流程
    在SpringCloudAlibaba中,Nacos服务自动注册流程大致遵循以下步骤:依赖集成:首先,通过在项目的pom.xml文件中添加spring-cloud-starter-alibaba-nacos-discovery依赖,将Nacos服务发现功能集成到SpringBoot应用中。配置文件设置:在application.properties或application.yml中......
  • 音视频入门基础:WAV专题(2)——WAV格式简介
    注:本文有部分内容引用了维基百科:https://zh.wikipedia.org/wiki/WAV一、引言WaveformAudioFileFormat(缩写WAVE或WAV)是微软与IBM公司所开发在个人电脑存储音频流的编码格式,在Windows平台的应用软件受到广泛的支持。此格式属于资源交换文件格式(RIFF)的应用之一(关于RIFF格......