【微服务】微服务组件之Nacos注册中心和配置中心的使用

news2024/11/13 18:03:26

在这里插入图片描述

背景:
在当前的软件架构领域,微服务架构凭借其高度的可扩展性、灵活性和可维护性,已成为企业构建复杂应用的首选。微服务架构通过将应用拆分成一系列小的、独立的服务,实现了服务的解耦和复用,从而提高了应用的可扩展性和灵活性。然而,随着微服务数量的不断增加,服务的注册、发现、配置和管理等问题也逐渐凸显出来。
正是在这样的背景下,Nacos应运而生。Nacos是一个由阿里巴巴开源的、面向云原生的动态服务发现、配置和服务管理平台。它提供了服务注册与发现、动态配置管理、服务和配置的实时监听等功能,帮助开发者更加轻松地构建和管理微服务架构。

文章目录

    • 1.Nacos简介
      • 1.1 Nacos的定义与背景
      • 1.2 Nacos在微服务架构中的角色
    • 2.Nacos的核心功能
      • 2.1 动态服务注册与发现
      • 2.2 动态配置管理
      • 2.3 服务健康监测
      • 2.4 集群与命名空间管理
    • 3.Nacos的安装与部署
      • 3.1 单机模式部署
      • 3.2 集群模式部署
    • 4.Nacos的专业使用示例
      • 4.1 服务注册与发现示例
        • 4.1.1 配置文件
        • 4.1.2 代码示例
      • 4.2 动态配置管理-Nacos实现配置热更新示例
        • 4.2.1 配置文件
        • **4.2.1.1概论**
        • 4.2.2 代码示例
    • 6.结论

1.Nacos简介

在这里插入图片描述

1.1 Nacos的定义与背景

Nacos(Dynamic Naming and Configuration
Service)是阿里巴巴开源的一个动态服务发现和配置管理平台,专为微服务架构和云原生应用设计。它旨在简化服务注册、配置管理和服务治理的复杂性,通过提供一套简单易用的特性集,帮助开发者快速构建、部署和管理微服务应用。

1.2 Nacos在微服务架构中的角色

在微服务架构中,Nacos扮演着至关重要的角色。作为服务注册中心,它允许服务实例动态地注册和注销,服务消费者通过Nacos查询可用的服务实例列表,并进行负载均衡调用。同时,Nacos还提供了动态配置管理功能,支持配置的集中存储、版本控制和动态刷新,极大地提高了配置的灵活性和效率。

2.Nacos的核心功能

2.1 动态服务注册与发现

Nacos支持基于DNS和基于HTTP的服务发现机制。服务实例在启动时向Nacos注册中心注册自己的信息(如服务名称、IP地址、端口号等),并在关闭时注销。服务消费者通过Nacos查询可用的服务实例列表,并根据负载均衡策略调用服务。

2.2 动态配置管理

Nacos提供了一个中心化的配置管理平台,支持配置的集中存储、版本控制和动态刷新。应用启动时从Nacos拉取配置信息,并在配置变更时自动刷新,无需重启应用。

2.3 服务健康监测

Nacos通过心跳检测等方式实时监控服务实例的健康状态。当服务实例不健康时,Nacos会将其从服务列表中剔除,防止服务消费者调用不健康的服务实例。

Nacos目前SDK维护了两个分支的版本(1.x、2.x),这两个版本心跳机制的实现不一样。其中1.x版本的SDK通过http协议来定时向服务端发送心跳维持自己的健康状态,2.x版本的SDK则通过grpc自身的心跳机制来保活,当Nacos服务端接受不到服务实例的心跳,会认为实例下线。如下图:
在这里插入图片描述

2.4 集群与命名空间管理

Nacos支持集群部署模式,以提高系统的可用性和扩展性。通过集群部署,Nacos可以实现数据的高可用和负载均衡。此外,Nacos还提供了命名空间(Namespace)功能,以实现不同环境(如开发、测试、生产等)的配置隔离和服务管理

3.Nacos的安装与部署

3.1 单机模式部署

单机模式部署适用于测试和开发环境。下载Nacos的发行版后,解压并修改配置文件(如conf/application.properties),配置数据源(可选)和端口号等参数。然后启动Nacos服务即可。

  • 下载 Nacos 发行版并解压。
  • 修改 conf/application.properties 文件中的配置,如服务端口和数据存储位置。
  • 运行 startup.sh -m standalone 启动 Nacos 服务。

3.2 集群模式部署

集群模式部署涉及多个 Nacos 节点的配置和启动,需要配置 cluster.conf 文件指定集群中各个节点的 IP 和端口,并确保各节点之间网络互通。然后分别启动各个节点,形成集群。

4.Nacos的专业使用示例

4.1 服务注册与发现示例

4.1.1 配置文件

在src/main/resources目录下创建application.properties文件,配置Nacos服务器的地址和服务的基本信息:

properties

spring.application.name=user-service  
server.port=8080  
spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848

或者
application.yml

spring:  
  application:  
    name: user-service  
  cloud:  
    nacos:  
      discovery:  
        server-addr: 127.0.0.1:8848  
server:  
  port: 8080
4.1.2 代码示例

创建一个Spring Boot应用,并使用@EnableDiscoveryClient注解启用服务注册与发现功能:

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

  }

4.2 动态配置管理-Nacos实现配置热更新示例

4.2.1 配置文件
spring:
  cloud:
    nacos:
      config:
        server-addr: localhost:8848 # Nacos服务器地址
        namespace: your-namespace-id # 命名空间ID
        group: DEFAULT_GROUP # 配置分组
        data-id: your-data-id # 配置的Data ID

在Nacos控制台创建配置类
在这里插入图片描述

介绍一下:Naocs界面中的一些概念及使用方式
Nacos通过命名空间(Namespace)+分组(Group)+应用(Data ID或Name)确定一个唯一的服务实例。它们的范围由大到小依次是:命名空间、分组、服务。

4.2.1.1概论

在这里插入图片描述
命名空间(Namespace)

    用于租户粒度的配置隔离。不同的命名空间下可以存在相同的 Group 或 Data ID 的配置。

    使用场景:一般用Namespace来实现环境隔离,用于实现不同环境(如开发、测试、生产等)或不同应用程序间配置和服务信息隔离    例如:测试环境和生产环境的隔离。

配置分组(Group) 也叫配置组

    分组(Group)是次于命名空间的一种隔离概念。

    使用场景:区分项目。(用于多个项目共用Nacos的情况)  当不同的项目应用或组件使用了相同类型的配置时,可以通过配置分组来区分它们,以便更好地管理和维护。

配置集 ID(Data ID)

     Data ID一般用于区分应用,一般用应用名来作为它的值。  每个Data ID对应一个具体的配置信息,如数据库连接信息、消息队列配置等。通过Data ID,可以轻松地在Nacos中查找、获取和更新配置信息

配置集

    一组配置项的集合称为配置集。一个配置文件通常就是一个配置集,包含了系统各个方面的配置。例如,一个配置集可能包含了数据源、线程池、日志级别等配置项。

下面演示一下Nacos控制台的操作:
默认命名空间:
在这里插入图片描述
下面我们来新建两个环境的命名空间 dev 和 test

,以配置另外两个环境的配置文件
在这里插入图片描述
在这里插入图片描述
配置列表中就出现了两个 tab
在这里插入图片描述
我们把原来的配置克隆到新的命名空间下
在这里插入图片描述
然后需要我们在 bootstrap.yml 中配置一下使用的命名空间

server:
  port: 9201

# Spring
spring:
  application:
    # 应用名称
    name: cloud-nacos-provider
  profiles:
    # 环境配置
    active: test
  cloud:
    nacos:
      discovery:
        # 服务注册地址
        server-addr: 127.0.0.1:8848
        # 服务注册到哪个命名空间
        namespace: 91e42ae4-9596-42fb-a24d-5d71aea068c9
      config:
        # 配置中心地址
        server-addr: 127.0.0.1:8848
        # 服务从哪个命名空间拉取配置
        namespace: 91e42ae4-9596-42fb-a24d-5d71aea068c9
        # 配置文件格式
        file-extension: yml
        # 共享配置
        shared-configs:
        - application-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}

增加 spring.cloud.nacos.discovery.namespace 和 spring.cloud.nacos.config.namespace 配置,值就是我们控制台创建时候生成的 命名空间id

4.2.2 代码示例
@Component
@ConfigurationProperties(prefix = "nacos")
public class ExampleProperties {
    private String config;

    // getters and setters
    public String getConfig() {
        return config;
    }

    public void setConfig(String config) {
        this.config= config;
    }
}

使用配置
在你的服务中注入这个配置类,并使用它:

@Service
@RefreshScope
public class ExampleService {
    private final ExampleProperties exampleProperties;

    @Autowired
    public ExampleService(ExampleProperties exampleProperties) {
        this.exampleProperties = exampleProperties;
    }

    public String getConfig() {
        return exampleProperties.getConfig();
    }
}

为了能够在Nacos中的配置发生变化时自动更新Spring环境中的配置,不需要做任何额外的编码工作,因为Spring Cloud
Alibaba Nacos Config已经为你处理了这部分逻辑。

当在Nacos配置管理界面中修改了对应的配置并发布后,Spring
Cloud应用会自动检测到这些变化并重新加载配置。@ConfigurationProperties注解的配置类会自动更新其属性值。

6.结论

Nacos作为一款功能强大的服务发现和配置管理平台,凭借其动态服务发现、配置管理、服务健康检查以及动态DNS服务等核心功能,为微服务架构下的应用提供了极大的便利和灵活性。其高可用、易扩展的设计,以及与Spring
Cloud等主流微服务框架的无缝集成,使得Nacos成为构建现代云原生应用的理想选择。无论是对于初创企业还是大型企业,Nacos都能提供稳定可靠的服务

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

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

相关文章

Sass实现网页背景主题切换

Sass 实现网页背景主题切换 前言准备工作一、 简单的两种主题黑白切换1.定义主题2. 添加主题切换功能3. 修改 data-theme 属性 二、多种主题切换1. 定义主题2. 动态生成 CSS 变量1.遍历列表2.遍历映射3.高级用法 3. 设置默认主题4. 切换功能HTML 三、多种主题多种样式切换1. 定…

在 Fedora 上安装 LAMP(Linux、Apache、MySQL、PHP)的方法

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。 关于 LAMP LAMP 栈是一组用于启动和运行 Web 服务器的开源软件。该缩写代表 Linux、Apache、MySQL 和 PHP。由于服务器已经在运行 Fedo…

高性能web服务器1

基础 Web 服务简介 Web 服务是互联网的核心组成部分之一,它允许用户通过浏览器访问信息和应用程序。一个基础的 Web 服务通常由 Web 服务器软件、静态网页内容、以及可选的动态内容生成程序组成。 Web 服务器软件 Web 服务器软件是运行在服务器上的程序&#xff…

【Java 数据结构】PriorityQueue介绍

优先级队列 回顾二叉树堆堆是什么堆的实现初始化堆的创建向下调整建堆复杂度插入向上调整建堆复杂度删除 PriorityQueue类介绍PriorityQueue是什么PriorityQueue使用构造方法常用方法 PriorityQueue源码介绍Top-K问题 回顾二叉树 上一次我们简单的了解了二叉树这个数据结构, 但…

每天五分钟深度学习框架pytorch:神经网络工具箱nn的介绍

本文重点 我们前面一章学习了自动求导,这很有用,但是在实际使用中我们基本不会使用,因为这个技术过于底层,我们接下来将学习pytorch中的nn模块,它是构建于autograd之上的神经网络模块,也就是说我们使用pytorch封装好的神经网络层,它自动会具有求导的功能,也就是说这部…

夏晖WMS是什么?夏晖WMS怎么与金蝶云星空进行集成?

在数字化浪潮席卷全球的今天,企业对于业务流程的高效管理和数据集成的需求愈发迫切。夏晖WMS作为一款领先的仓库管理系统,与金蝶云星空ERP的集成成为了众多企业提升管理效率的关键环节。 夏晖WMS是什么? 夏晖WMS是一款由夏晖物流(上海&…

Golang | Leetcode Golang题解之第355题设计推特

题目: 题解: type Twitter struct {Tweets []intUserTweets map[int][]intFollows map[int][]intIsFollowMy map[int]bool }/** Initialize your data structure here. */ func Constructor() Twitter {// 每一次实例化的时候,都重新分配一次…

C语言 | Leetcode C语言题解之第354题俄罗斯套娃信封问题

题目: 题解: int cmp(int** a, int** b) {return (*a)[0] (*b)[0] ? (*b)[1] - (*a)[1] : (*a)[0] - (*b)[0]; }int maxEnvelopes(int** envelopes, int envelopesSize, int* envelopesColSize) {if (envelopesSize 0) {return 0;}qsort(envelopes, …

宜佰丰超市进销存管理系统

你好呀,我是计算机学姐码农小野!如果有相关需求,可以私信联系我。 开发语言: Java 数据库: MySQL 技术: JavaMysql 工具: IDEA/Eclipse、Navicat、Maven 系统展示 首页 管理员功能模块…

接口测试及常用接口测试工具(postman/jmeter)详解

🍅 点击文末小卡片 ,免费获取软件测试全套资料,资料在手,涨薪更快 首先,什么是接口呢? 接口一般来说有两种,一种是程序内部的接口,一种是系统对外的接口。 系统对外的接口&#x…

【Alibaba Cola 状态机】重点解析以及实践案例

【Alibaba Cola 状态机】重点解析以及实践案例 1. 状态模式 状态模式是一种行为型设计模式,允许对象在内部状态改变时改变其行为,简单地讲就是,一个拥有状态的context对象,在不同状态下,其行为会发生改变。看起来是改…

Spring项目:文字花园(四)

一.实现登录 传统思路: • 登陆⻚⾯把⽤⼾名密码提交给服务器. • 服务器端验证⽤⼾名密码是否正确, 并返回校验结果给后端 • 如果密码正确, 则在服务器端创建 Session . 通过 Cookie 把 sessionId 返回给浏览器. 问题: 集群环境下⽆法直接使⽤Session. 原因分析: 我们开…

渐变纹理的使用

1、渐变纹理的使用 通过单张纹理和凹凸纹理相,我们知道图片中存储的数据不仅仅可以是颜色数据,还可以是高度、法线数据。 理论上来说,图片中存储的数据我们可以自定义规则,我们可以往图片中存储任何满足 我们需求的数据用于渲染。…

原神4.8版本抽到角色和重点培养数据表

<!DOCTYPE html> <html lang"zh-cn"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>原神4.8版本抽到角色和重点培养数据表</title…

vue-element-admin——<keep-alive>不符合预期缓存的原因

vue-element-admin——<keep-alive>不符合预期缓存的原因 本文章&#xff0c;以现在中后台开发用的非常多的开源项目vue-element-admin为案例。首先&#xff0c;列出官方文档与缓存<keep-alive>相关的链接&#xff08;请认真阅读&#xff0c;出现缓存<keep-ali…

MSR配置

公钥私钥 网页上提供的脚本安装客户端??去掉跳板机 history | grep azcopy 44 azcopy 47 azcopy cp --recursive --log-level NONE --overwrite true https://singularitywor9084471172.blob.core.windows.net/yifanyang/thinking.py\?sv\2023-01-03\&st\2024-…

机器学习:逻辑回归实现下采样和过采样

1、概述 逻辑回归本身是一种分类算法&#xff0c;它并不涉及下采样或过采样操作。然而&#xff0c;在处理不平衡数据集时&#xff0c;这些技术经常被用来改善模型的性能。下采样和过采样是两种常用的处理不平衡数据集的方法。 2、下采样 1、概念 下采样是通过减少数量较多的类…

【学习笔记】Day 19

一、进度概述 1、机器学习常识1-11&#xff0c;以及相关代码复现 二、详情 1、不确定性 所谓不确定性, 是指我们在进行预测的时候, 不能够保证 100% 的准确。而机器学习&#xff0c;比的就是谁 “猜的更准”。 不确定性&#xff0c;可能由信息不足、信息模糊等原因产…

编写开放接口与思考

编写开放接口与思考 一、情景描述&#xff1a; 当一个项目开发一定程度时&#xff0c;会有跟合作厂商对接共同开发的情况&#xff0c;那么如果合作厂商想要使用你项目中的某个接口&#xff0c;你该如何把接口暴露给他们&#xff1f; 二、实现方式分析 1、因为现在接口大部分…

超融合/分布式 IT 架构有哪些常见故障类型?如何针对性解决和预防?

本文刊于《中国金融电脑》2024 年第 7 期。 作者&#xff1a;SmartX 金融团队 以超融合为代表的分布式 IT 基础架构凭借其高性能、高可靠和灵活的扩展能力&#xff0c;在满足大规模、高并发、低延迟业务需求等方面展现出显著优势&#xff0c;成为众多金融机构构建 IT 基础设施…