SpringCloud Alibaba 微服务(二):Nacos

目录

前言

一、什么是Nacos?

二、Nacos的主要功能

服务发现与注册

配置管理

服务健康监控

集群模式

三、安装Nacos

下载Nacos

初始化Nacos

单机模式

集群模式

访问Nacos

四、服务注册

新建子工程

引入Nacos依赖

配置application.yml

创建启动类

运行项目

五、命名空间

什么是命名空间?

命名空间的主要用途

环境隔离

项目隔离

团队隔离

版本控制

如何使用Nacos的命名空间?

创建命名空间

服务注册到命名空间

六、配置中心

什么是 Nacos 配置中心?

配置中心的主要功能

集中化配置管理

配置动态更新

配置版本控制

配置分组管理

配置加密

Nacos配置的多环境管理

Data ID方案

多环境测试

Group方案

修改项目中的配置文件

启动测试

说明

命名空间方案

创建命名空间

修改项目中的配置文件

启动测试

说明

配置中心总结

总结


前言

在微服务架构中,服务的注册与发现、配置管理是至关重要的部分。Nacos(Naming and Configuration Service)作为Spring Cloud Alibaba生态中的核心组件,提供了强大的服务发现、配置管理和服务管理功能。本文将详细介绍Nacos的功能、使用方法以及在实际项目中的应用。


一、什么是Nacos?

Nacos是阿里巴巴开源的一个动态服务发现、配置管理和服务管理平台。它致力于帮助用户构建易于管理和维护的分布式系统。Nacos的主要功能包括:

服务发现和注册:通过Nacos,服务可以方便地注册自己并发现其他服务,从而实现负载均衡和故障转移。

配置管理:Nacos允许你集中管理配置文件,并在配置变化时实时推送到各个服务。

服务健康监控:Nacos提供了服务健康检查和告警功能,可以监控服务的运行状态。

二、Nacos的主要功能

服务发现与注册

Nacos提供了动态的服务发现与注册功能。服务启动时,会将自身信息(如服务名称、IP地址、端口号等)注册到Nacos服务器中。其他服务可以通过Nacos服务器查询并调用这些已注册的服务。

配置管理

Nacos的配置管理功能允许你集中管理应用的配置文件,并支持动态刷新。你可以通过Nacos控制台方便地添加、修改和删除配置项,服务可以实时获取最新的配置。

服务健康监控

Nacos提供了服务健康检查和监控功能。服务注册到Nacos后,Nacos会定期检查服务的健康状态,并在服务不可用时进行告警。

集群模式

Nacos支持集群模式,可以通过多个Nacos实例组成一个集群,提升系统的可用性和容错能力。

三、安装Nacos

下载Nacos

官方地址:Nacos 快速开始

稳定版下载地址:Release 2.2.3 (May 25th, 2023) · alibaba/nacos · GitHub

下载完后,解压

初始化Nacos

打开conf目录下的application.properties文件

初始化Nacos脚本

初始化后,运行Nacos

进入到bin目录下执行startup.cmd执行文件

默认运行方式是集群模式,本地我就用单机模式运行,二选一启动就行

单机模式

执行cmd命令

startup.cmd -m standalone

集群模式

集群模式启动,在nacos/conf目录下,将文件 cluster.conf.example 复制一份,重命名未cluster.conf,并将所有内容注释,然后再双击startup.cmd / startup.sh文件运行即可。

访问Nacos

启动成功,访问Nacos地址,http://192.168.1.85:8848/nacos/index.html

Nacos的默认账号密码:nacos/nacos

四、服务注册

新建子工程

引入Nacos依赖

<!-- Nacos 服务发现 -->
<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>

配置application.yml

server:port: 9090spring:application:name: demo-usercloud:nacos:discovery:server-addr: 192.168.1.85:8848

创建启动类

加上 @EnableDiscoveryClient 注解,它是一个Spring Boot注解,用于启用服务发现客户端。它指示Spring Boot应用程序将自身注册到服务发现代理(如Nacos、Eureka、Consul、Zookeeper等)中,并从代理中获取其他服务的地址进行通信。通过启用该注解,我们可以实现微服务之间的互相调用和负载均衡。

运行项目

注册成功,查看Nacos服务

五、命名空间

什么是命名空间?

命名空间(Namespace)是Nacos中一种逻辑上的分区,用于将不同环境、不同项目或不同团队的配置和服务进行隔离和管理。每个命名空间之间是完全独立的,互不影响。

命名空间的主要用途

环境隔离

在实际项目中,通常会有多个环境(如开发、测试、生产等),不同环境的配置和服务需要进行隔离,以避免相互干扰。通过使用命名空间,可以为每个环境创建独立的配置和服务空间,实现环境隔离。

例如,我们可以创建以下命名空间:

dev:用于开发环境

test:用于测试环境

prod:用于生产环境

项目隔离

在一个企业中,可能会有多个项目共用一个Nacos集群。为了避免不同项目之间的配置和服务互相干扰,可以为每个项目创建独立的命名空间。

例如,我们可以创建以下命名空间:

projectA:项目A的命名空间

projectB:项目B的命名空间

团队隔离

在大型团队中,不同的团队可能负责不同的模块或服务。为了方便管理和维护,可以为每个团队创建独立的命名空间。

例如,我们可以创建以下命名空间:

teamA:团队A的命名空间

teamB:团队B的命名空间

版本控制

在微服务架构中,服务和配置的版本控制也是一个重要的问题。通过使用命名空间,可以为不同的版本创建独立的命名空间,方便进行版本管理和切换。

例如,我们可以创建以下命名空间:

v1.0:版本1.0的命名空间

v2.0:版本2.0的命名空间

如何使用Nacos的命名空间?

创建命名空间

  1. 进入Nacos控制台,点击左侧菜单中的“命名空间”。
  2. 点击“创建命名空间”按钮,填写命名空间名称和描述,点击“确定”按钮完成创建。

服务注册到命名空间

在Spring Boot项目中,可以通过在配置文件中指定命名空间ID,将服务注册到指定的命名空间:

重新运行项目,服务就已经注册到demo命名空间下了

六、配置中心

什么是 Nacos 配置中心?

Nacos 配置中心是一个分布式的配置管理平台,支持集中化管理应用配置。它允许开发者在一个中心化的地方管理所有微服务的配置,并且能够动态地更新配置,避免了频繁重启服务的麻烦。

配置中心的主要功能

集中化配置管理

Nacos 配置中心提供了一个统一的界面,可以集中管理所有应用的配置。开发者可以在 Nacos 控制台上查看、添加、修改和删除配置项。

配置动态更新

Nacos 支持配置的动态更新,当配置发生变化时,能够实时推送到各个服务实例,确保配置的及时生效。

配置版本控制

Nacos 允许对配置进行版本控制,支持配置的回滚和版本管理,确保配置的可追溯性和可靠性。

配置分组管理

Nacos 支持将配置分组管理,通过 Group 来区分不同的配置集合,方便管理和查找。

配置加密

Nacos 提供配置加密功能,可以对敏感配置进行加密存储,确保配置的安全性。

Nacos配置的多环境管理

在实际开发中,通常一个系统会准备开发环境、测试环境、预发环境、正式环境

那么如何保证指定环境启动时服务能正确读取到Nacos上相应环境的配置文件呢?

Data ID方案

Data ID它的命名规则为:${prefix}-${spring.profile.active}.${file-extension},通过其中的spring.profile.active属性即可进行多环境下配置文件的读取

1、创建配置文件Data ID为:demo-user-dev.yml, 其配置如下:

2、创建配置文件Data ID为:demo-user-test.yml, 其配置如下:

多环境测试

启动项目,并指定spring.profiles.active,通过不同的环境进行启动

通过上面的配置,将项目分为dev、test两个环境启动后,进行测试

访问 localhost:9090/hello/sayHi 返回:这里是dev

访问 localhost:9090/hello/sayHi 返回:这里是test

可以看到,分别以dev、test启动后相应的读取到不同的配置,dev环境读取到启动端口为9980,test读取到启动端口9981

Group方案

上面介绍了通过指定spring.profile.active和配置文件的DataID来使不同环境下读取不同的配置

这里也可以不用DataID,直接通过Group实现环境区分

注:这种方式不太推荐,切换不灵活,需要切换环境时要改Gruop配置

1、创建配置文件Data ID为:demo-user.yml, Group为:DEV_GROUP,其配置如下:

2、创建配置文件Data ID为:demo-user.yml, Group为:TEST_GROUP,其配置如下:

这里的两个配置文件他们的DataID相同但是Group不同

修改项目中的配置文件

在config下增加一条group的配置,指定配置文件所在的group,可配置为DEV_GROUP或DEV_GROUP

server:port: 9090spring:application:name: demo-usercloud:nacos:discovery:server-addr: 192.168.1.85:8848namespace: democonfig:server-addr: 192.168.1.85:8848prefix: ${spring.application.name}file-extension: ymlnamespace: devgroup: DEV_GROUP
启动测试

将group配置为DEV_GROUP启动进行测试

访问 localhost:9090/hello/sayHi 返回:这里是dev

将group配置为TEST_GROUP启动进行测试

访问  localhost:9090/hello/sayHi 返回:这里是test

通过指定group的方式启动,DEV_GROUP读取到:这里是dev,TEST_GROUP读取到:这里是test

说明

只通过Group来进行多环境的区分的方式我不推荐使用,因为涉及到了多环境自然就会改变spring.profile.active,而profile一旦生效,配置文件就会依据DataID的规则进行查找。所以Group的方式仅作参考。

Group的合理用法应该是配合命名空间进行服务列表和配置列表的隔离和管理

命名空间方案

Namespace命名空间进行环境隔离也是官方推荐的一种方式。Namespace的常用场景之一是不同环境的配置的区分隔离,例如:开发测试环境和生产环境的资源(如配置、服务)隔离等。

创建命名空间

创建命名空间demodev,如下图

修改项目中的配置文件
server:port: 9090spring:application:name: demo-usercloud:nacos:discovery:server-addr: 192.168.1.85:8848namespace: democonfig:server-addr: 192.168.1.85:8848prefix: ${spring.application.name}file-extension: ymlnamespace: dev
启动测试

将namespace配置为DEV的ID:dev,启动进行测试

访问 localhost:9090/hello/sayHi 返回:Hello Nacos Demo!

将namespace配置为TEST的ID:demo,启动进行测试

访问  localhost:9090/hello/sayHi  返回:Hello Nacos Config!

通过指定namespace的方式启动,均可读取到对应的启动端口和相关配置。

说明

Namespace是官方推荐的环境隔离方案,确实有他的独到之处,使用namespace这种方案,同时可以与DataID+profile的方式结合

同时释放Group的限制,大大提高多环境配置管理的灵活性。

配置中心总结

通过上面三种方案的介绍,想必大家对于多环境下的配置读取方式应该有所选择

DataID: 适用于项目不多,服务量少的情况。

Group:实现方式简单,但是容易与DataID方案发生冲突,仅适合于本地调试

Namespace:实现方式简单,配置管理简单灵活,同时可以结合DataID共同使用,推荐这种方案


总结

Nacos作为Spring Cloud Alibaba的重要组件,为微服务架构提供了强大的服务发现、配置管理和服务管理功能。

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

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

相关文章

内网穿透的应用-中文版个人知识库Trilium笔记本地安装结合内网穿透远程协作

文章目录 前言1. 安装docker与docker-compose2. 启动容器运行镜像3. 本地访问测试4.安装内网穿透5. 创建公网地址6. 创建固定公网地址 前言 今天和大家分享一款在G站获得了26K的强大的开源在线协作笔记软件&#xff0c;Trilium Notes的中文版如何在Linux环境使用docker本地部署…

Linux基础复习(五)

前言 本文介绍了Linux常用命令&#xff0c;接Linux基础复习&#xff08;四&#xff09; 一、常用命令 命令通配符 在Linux中&#xff0c;命令通配符&#xff08;也称为通配符模式或通配符表达式&#xff09;是用来匹配文件名或其他字符串的一种特殊字符。这些通配符可以帮助…

深入解析 GZIP 压缩传输:优化网络性能的利器

个人名片 🎓作者简介:java领域优质创作者 🌐个人主页:码农阿豪 📞工作室:新空间代码工作室(提供各种软件服务) 💌个人邮箱:[2435024119@qq.com] 📱个人微信:15279484656 🌐个人导航网站:www.forff.top 💡座右铭:总有人要赢。为什么不能是我呢? 专栏导…

访问控制列表(ACL)

文章目录 ACL原理与基本配置ACL分类ACL组成ACL规则的匹配与应用 ACL原理与基本配置 ACL(Access Control List&#xff0c;访问控制列表) 读取二层、三层、四层报文信息根据预先定义好的规则对报文进行过滤和分类实现网络访问控制、防止网络攻击和提高网络带宽利用率等目的提高…

力扣SQL50 上级经理已离职的公司员工 一题双解

Problem: 1978. 上级经理已离职的公司员工 Code -- 方法 1 -- select e1.employee_id -- from employees e1 -- left join employees e2 -- on e1.manager_id e2.employee_id -- where e1.salary < 30000 -- and e1.manager_id is not null -- and e2.employee_id is…

学鸿蒙开发好找工作吗?

学鸿蒙开发是一个非常有潜力的方向&#xff0c;因为鸿蒙系统是华为自主研发的操作系统&#xff0c;随着其在全球范围内的推广和应用&#xff0c;越来越多的企业和组织开始重视并采用这一系统。这使得鸿蒙开发者的市场需求正在持续增长&#xff0c;为鸿蒙开发者提供了更多的就业…

C# 设计倒计时器、串口助手开发

文章目录 1. 实现一个简单的倒计时器开始、暂停2. 串口助手开发 1. 实现一个简单的倒计时器开始、暂停 namespace Timer {public partial class Form1 : Form{int count;//用于定时器计数int time;//存储设定的定时值bool parse false;//控制暂停计时public Form1(){Initiali…

Qt Designer,仿作一个ui界面的练习(一):界面的基本布局

初学不要太复杂&#xff0c;先做一个结构简单的&#xff0c;大致规划一下功能分区&#xff0c;绘制草图&#xff1a; 最终的效果&#xff1a; 界面主要由顶边栏、侧边栏、内容区构成。顶边栏左边是logo&#xff0c;右边是时钟显示。侧边栏最上边是切换按钮&#xff0c;用以动画…

Qt中对象树机制的优点以及潜在的隐患

目录 一、什么是对象树 二、对象树的优点 三、对象树潜在的隐患 一、什么是对象树 Qt中的 QObject 会用对象树来组织管理自己&#xff0c;那什么是对象树? 这个概念非常好理解。因为 QObject 类就有一个私有变量 QList<QObject *>&#xff0c;专门存储这个类的子孙后…

centos7-8/redhat7-8一键安装配置vsftp服务

1.脚本介绍 1.1.介绍&#xff1a; linux下一键安装及配置vsftpd服务 &#xff0c;通过执行install.sh脚本&#xff0c;脚本会根据参数区域的值执行安装和配置vsftp服务&#xff0c;安装后会创建一个默认ftp用户wangxf密码wangxf2023 1、支持自定义安装(更改脚本内参数值) 2、…

一篇文章带你入门爬虫并编写自己的第一个爬虫程序

一、引言 目前我们处在一个信息快速迭代更新的时代&#xff0c;海量的数据以大爆炸的形式出现在网络之中&#xff0c;相比起过去那个通过广播无线电、书籍报刊等传统媒介获取信息的方式&#xff0c;我们现在通过网络使用搜索引擎几乎可以获得任何我们需要的信息资源。 但与此同…

优化mac outlook通过nginx反向代理后使用ews访问Exchange 2016邮件访问速度慢的有效方法

在nginx配置exchange的反向代理后,mac系统上通过exchange邮箱,通过nginx代理连接邮箱,发现速度很慢,通过查看日志,也存在大量的401失败日志。通过不断的优化和尝试,目前来看,基本上正常了,基本上没有出现大量访问失败的问题。以下就是优化过程中尝试过的方法。 1. 身份…

【精通Redis】Redis命令详解

引言 Redis是一个内存数据库&#xff0c;在学习它的内部原理与实现之前&#xff0c;我们首先要做到的就是学会使用&#xff0c;学会其丰富的命令操作。 一、字符串 Redis的字符串类型之前笔者的一篇入门介绍中曾经说过&#xff0c;不是简单的只存人可以阅读的字符串&#xf…

【前端 19】使用Vue-CLI脚手架构建Vue2项目

使用Vue CLI构建Vue 2项目 引言 Vue.js 是一个构建用户界面的渐进式JavaScript框架&#xff0c;以其轻量级和易用性受到前端开发者的广泛喜爱。Vue CLI&#xff08;Vue Command Line Interface&#xff09;是一个基于Vue.js进行快速开发的完整系统&#xff0c;提供了零配置的项…

数据结构之线性表(顺序表的实现)

目录 一、线性表的原理 二、线性表的实现&#xff08;顺序表&#xff09; 1.定义顺序表 2.初始化顺序表 3.判断顺序表是否为空 4.获取顺序表的长度 5.向顺序表中插入元素 6.删除指定位置的元素 7.遍历顺序表 8.得到指定位置的元素 三、打印测试功能 1.测试 2.结果…

全球相机控制面板市场展望与未来增长机遇:预计未来六年年复合增长率CAGR为4.3%

在全球摄影器材和专业影像设备需求增长的背景下&#xff0c;相机控制面板正成为市场的焦点。本文详细分析了全球相机控制面板市场的现状、增长趋势及未来前景&#xff0c;旨在为投资者和业内人士提供深入的市场洞察和指导。 市场概览 据恒州诚思团队研究分析显示&#xff0c;2…

RK3568笔记四十七:PWM 子系统

若该文为原创文章&#xff0c;转载请注明原文出处。 pwm 子系统功能单一&#xff0c;很少单独使用&#xff0c;一般用于控制显示屏的背光、控制无源蜂鸣器、伺服电机、电压调节等等。 一、PWM介绍 PWM(Pulse width modulation)&#xff0c;脉冲宽度调制。在内核中 PWM 驱动较简…

学习大数据DAY26 简单数据清洗练习和 Shell 脚本中的数据库编程

目录 上机练习 14 mysql 命令 sql 语句实现步骤 shell 脚本导入 csv 格式文件到 mysql 数据库 secure-file-priv 特性 把文件拷贝到 mysql 指定目录下 上机练习 15 mysqldump 命令 上机练习 16 上机练习 14 运用上一节课学的 Shell 工具完成 1. 清洗数据《infotest.t…

CentOS7 yum报错Cannot find a valid baseurl for repo

问题 Loaded plugins: fastestmirror Determining fastest mirrors Could not retrieve mirrorlist http://mirrorlist.centos.org/?release7&archx86_64&repoos&infravag error was 14: curl#6 - "Could not resolve host: mirrorlist.centos.org; Unknown…

前端canvas——五子棋小游戏开发

这估计是最后一篇了&#xff0c;终于是修复了部分bug——隔一个空格能够胜利的bug&#xff0c;并且添加了部分样式。 其他bug目前还没有找到&#xff0c;找到再说吧。 大部分代码请见&#xff1a; 用canvas实现五子棋小游戏https://blog.csdn.net/m0_54066656/article/detail…