注册中心/配置管理 —— SpringCloud Alibaba Nacos
Nacos 简介
Nacos 是一个易于使用的动态服务发现、配置和服务管理平台,用于构建云原生的应用程序
Nacos 的关键特性包括以下几项:
- 服务发现和服务健康监测:服务提供者使用原生 SDK、OpenAPI 等注册服务后,服务消费者可以使用 HTTP&API 查找和发现服务。Nacos 提供对服务的实时健康检查,阻止向不健康的主机或服务实例发送请求
- 动态配置服务:动态配置服务可以让你以中心化、外部化和动态化的方式管理所有环境的应用配置和服务配置。动态配置消除了配置变更时重新部署应用和服务的需要,让配置管理变得更加高效和敏捷
- 动态 DNS 服务:动态 DNS 服务支持权重路由,让你更容易实现中间层负载均衡、更灵活的路由策略、流量控制以及数据中心内网的简单 DNS 解析服务
- 服务及其元数据管理:Nacos 从微服务平台建设的视角管理数据中心的所有服务及元数据,包括管理服务的描述、生命周期、服务的静态依赖分析、服务的健康状态、服务的流量管理、路由及安全策略、服务的 SLA 以及首要的 metrics 统计数据
Nacos 快速开始
1. Nacos Server 单机模式
在使用 Nacos 之前,需要先下载 Nacos 并启动 Nacos Server,Nacos Server 有两种运行模式:standalone(单机)和 cluster(集群),这里以 2.2.3.release,windows 环境为例
前往 Github 下载 Nacos Server:GitHub - alibaba/nacos: an easy-to-use dynamic service discovery, configuration and service management platform for building cloud native applications.
解压压缩包,在 bin 目录下执行命令 .\startup.cmd -m standalone
在浏览器中访问:http://localhost:8848/nacos,输入用户名和密码 Nacos/Nacos 便可进入 Nacos 首页
如要关闭 Nacos,在 bin 目录下执行命令 .\shutdown.cmd
0.7 版本之前的 Nacos 在单机模式时使用入式数据库实现数据的存储,不方便观察数据存储的基本情况,0.7 版本之后支持 MySQL 数据源能力,具体的操作步骤如下:
安装 MySQL 数据库(版本要求5.6.5+)
创建数据库 nacos_config,在 conf 目录下找到 mysql-schema.sql 初始化文件并进行初始化
修改 conf/applicationproperties 文件,增加 MySQL 数据源配置
### Count of DB:
db.num=1
### Connect URL of DB:
db.url.0=jdbc:mysql://127.0.0.1:3306/nacos_config?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC
db.user.0=root
db.password.0=123
之后 Nacos 所有的数据都会保存到 MySQL
2. Nacos Server 集群模式
Nacos 单机模式仅仅适用于测试和单机适用,生产环境大多适用集群模式以确保高可用
接下来讲解如何搭建 Nacso 集群环境,具体步骤如下:
将下载的 Nacos 安装包复制两份,分别命名为 Nacos-01,Nacos-02、Nacos-03,注意,集群模式必须使用配置数据库(如 MySQL)
修改 Nacos-02、Nacos-03 的配置文件 conf/applicationproperties,将服务启动端口分别改为 8850 和 8852
#*************** Config Module Related Configurations ***************#
### If use MySQL as datasource:
### Deprecated configuration property, it is recommended to use `spring.sql.init.platform` replaced.
spring.datasource.platform=mysql
spring.sql.init.platform=mysql
#*************** Spring Boot Related Configurations ***************#
### Default web context path:
server.servlet.contextPath=/nacos
### Include message field
server.error.include-message=ALWAYS
### Default web server port:
server.port=8850
注意:nacos 在 2.0 版本以后,除对外的端口外,还占用另外三个端口:
- raft port: ${server.port} - 1000
- grpc port: ${server.port} + 1000
- grpc port for server: ${server.port} + 1001
假设对外端口为 8848,即总共会有4个端口被占用,分别为 7848、8848、9848、9849,因此,在同一台机启动多个 nacos 节点时要注意避开所有占用的端口
在 Nacos-01、Nacos-02、Nacos-03 的 conf 目录下添加 cluster.conf 集群配置文件
### 这里简单将3个nacos实例部署在同一个机器下
#
127.0.0.1:8848
127.0.0.1:8850
127.0.0.1:8852
分别进入 Nacos-01、Nacos-02、Nacos-03 的 bin 目录执行命令
.\startup.cmd,没有参数默认就是集群模式
3. Nacos+Nginx 集群模式
在 Nginx 核心配置文件 nginx.conf 添加如下配置
server {
listen 8847;
server_name localhost;
location /nacos {
proxy pass http://nacos-server/nacos;
}
upstream nacos-server {
server 127.0.0.1:8848;
server 127.0.0.1:8850;
server 127.0.0.1:8852;
}
}
启动 Nginx,访问:http://localhost:8847/nacos,至此我们完成 Nacos+Nginx 的搭建
SpringBoot 注册到 Nacos
1. Nacos 配置管理
以 SpringBoot 2.3.12.RELEASE 为例,在项目的 pom.xml 文件添加如下依赖:
<dependency>
<groupId>com.alibaba.boot</groupId>
<artifactId>nacos-config-spring-boot-starter</artifactId>
<version>0.2.12</version>
</dependency>
在 application.properties 中配置 Nacos Server 的地址
# 如果搭建了集群只需要填其中一个节点的ip:port即可
nacos.config.server-addr=127.0.0.1:8848
# 如果配置了Nginx,则输入配置的地址,如上面我配置的
# nacos.config.server-addr=127.0.0.1:8847/nacos
在启动类中使用 @NacosPropertySource 加载 dataId 为 springboot-nacos-config 的配置源,并开启自动更新
@SpringBootApplication
@NacosPropertySource(dataId = "springboot-nacos-config", autoRefreshed = true)
public class SpringbootNacosApplication {
public static void main(String[] args) {
SpringApplication.run(SpringbootNacosApplication.class, args);
}
}
当然,我们需要在 Nacos 的配置列表中添加 Data-Id: springboot-nacos-config 的配置文件
test.name=hahaha
通过 Nacos 的 @NacosValue 注解设置属性值
@RestController("config")
public class ConfigCon {
@NacosValue(value = "${test.name}", autoRefreshed = true)
private String name;
@GetMapping("get")
public String get() {
return name;
}
}
2. Nacos 服务注册
在项目的 pom.xml 文件添加如下依赖:
<dependency>
<groupId>com.alibaba.boot</groupId>
<artifactId>nacos-discovery-spring-boot-starter</artifactId>
<version>0.2.12</version>
</dependency>
在 application.properties 中配置 Nacos Server 的地址
spring.application.name=springboot-nacos
server.port=8080
server.address=127.0.0.1
# 如果搭建了集群只需要填其中一个节点的ip:port即可
nacos.discovery.server-addr=127.0.0.1:8848
# 如果配置了Nginx,则输入配置的地址,如上面我配置的
nacos.discovery.server-addr=127.0.0.1:8847/nacos
修改启动类,运行即可
@SpringBootApplication
@NacosPropertySource(dataId = "springboot-nacos-config", autoRefreshed = true)
public class SpringbootNacosApplication implements CommandLineRunner {
// 使用@NacosInjected注入Nacos的NamingService实例
// NamingService是Nacos对外提供给使用者的接口
@NacosInjected
private NamingService namingService;
@Value("${spring.application.name}")
private String applicationName;
@Value("${server.port}")
private Integer serverPort;
@Value("${server.address}")
private String serverAddress;
public static void main(String[] args) {
SpringApplication.run(SpringbootNacosApplication.class, args);
}
@Override
public void run(String... args) throws Exception {
//应用启动时,将服务注册到Nacos
namingService.registerInstance(applicationName, serverAddress, serverPort);
}
}
Nacos SpringCloud
本节主要讲解 SpringCloud 的如何通过 Nacos 实现配置管理和服务发现,以 SpringBoot 2.3.12.RELEASE 为例
1. Nacos 配置管理
在项目的 pom.xml 文件添加如下依赖:
<dependencies>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>2.2.10-RC1</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
在 application.properties 中配置 Nacos Server 的地址
server.port=8080
spring.application.name=springcloud-nacos
spring.cloud.nacos.config.server-addr=127.0.0.1:8848
# spring.cloud.nacos.config.server-addr=127.0.0.1:8847/nacos
spring.application.name 之后会构成 Nacos 配置管理 datald 字段的一部分,在 Nacos Spring Cloud中,datald 的完整格式如下:${prefix}-${spring.profile.active}.${file-extension}
${prefix}:默认为spring.application.name的值,也可以通过spring.cloud.Nacos.config.prefix配置项来配置${spring.profile.active}:当前环境对应的 profile,当spring.profile.active为空时,对应的连接符-也将不存在,datald 的拼接格式变成${prefix}.${file-extension}${file-extension}:配置内容的数据格式,可以通过 `spring.cloud.Nacos.config.file-extension· 来配置 properties 或 yaml 类型
在 Nacos 配置列表中创建 springcloud-nacos.properties 配置文件
test.name=hahah
开发 Controller 获取配置
@RefreshScope
@RestController("config")
public class ConfigCon {
@Value("${test.name}")
private String name;
@GetMapping("get")
public String get() {
return name;
}
}
2. Nacos 服务注册
在项目的 pom.xml 文件添加如下依赖:
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>2.2.10-RC1</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
在 application.properties 中配置 Nacos Server 的地址
server.port=8080
spring.application.name=springcloud-nacos
spring.cloud.nacos.discovery.server-addr=127.0.0.1:8847/nacos
在启动类上添加 @EnableDiscoveryClient 注解开启服务注册发现功能
@EnableDiscoveryClient
@SpringBootApplication
public class SpringcloudNacosApplication {
public static void main(String[] args) {
SpringApplication.run(SpringcloudNacosApplication.class, args);
}
}
在 Nacos 管理页面查看服务列表,发现服务已经注册到 Nacos,服务提供端和消费端都用这种方式进行注册,之后消费端可直接通过服务名直接调用提供端的接口
命名空间 & 分组
除了 DataId,Nacos 还提供了命名空间(Namespace)和 配置分组(Group)用于组织配置。不同的 Namespace 下,可以存在相同的 Group 或 DataId 的配置。同理,不同的 Group 下,可以存在相同的 DataId
一般情况下,最好使用 Namespace 区分环境(dev、sit、uat、prod),Group 区分微服务或项目。Nacos 的权限管理可以控制到命名空间,但不能控制分组。不同的账号对应不同的环境,能够将各个环境隔离开
在 Nacos 控制台名为 dev 的 Namespace,在其下创建名为 springcloud-project 的分组以及名为 service-01.yml 的配置文件



项目下创建 bootstrap.yml 配置文件
server:
port: 8000
spring:
application:
name: service-01
cloud:
nacos:
config:
server-addr: 127.0.0.1:8847/nacos
namespace: 0178e474-2cfb-47c3-bded-da7cfa260f99 # 命名空间id
group: springcloud-project # 分组名
file-extension: yml # 指定格式
discovery:
server-addr: 127.0.0.1:8847/nacos
namespace: 0178e474-2cfb-47c3-bded-da7cfa260f99 # 命名空间id
group: springcloud-project # 分组名
创建 TestCon 类,获取配置值
@Slf4j
@RestController
public class TestCon {
@Value("${test.value}")
private String testValue;
@GetMapping("/test/getConfig")
public void getConfig() {
log.info("testValue: {}", testValue);
}
}
注册中心/配置管理 —— SpringCloud Alibaba Nacos的更多相关文章
- SpringCloud Alibaba Nacos服务注册与配置管理
Nacos SpringCloud Alibaba Nacos是一个狗抑郁构建云原生应用的动态服务发现.配置管理和服务管理平台. Nacos:Dynamic Naming and Configurat ...
- SpringCloud Alibaba Nacos 服务注册
业务服务接入Nacos服务治理中心 启动Nacos访问地址为:http://101.200.201.195:8848/nacos/ 创建bom工程用于管理依赖(下方附加源码地址) 准备工作完成后开始接 ...
- 微服务实战系列(四)-注册中心springcloud alibaba nacos
1.场景描述 因要用到微服务,关于注册中心这块,与同事在技术原型上做了讨论,初步定的方案是使用:阿里巴巴的nacos+springcloud gateway,下面表格是同事整理的注册中心对比,以前用的 ...
- SpringCloud Alibaba Nacos 服务治理中心
目录 一.什么是Nacos? 二.Nacos能干吗? 三.Nacos关键特性 四.Nacos中的基本概念 五.如何安装部署Nacos? 六.Nacos数据持久化 一.什么是Nacos? 英文全称Dyn ...
- SpringCloud Alibaba Nacos注册中心源码浅析
一.前置了解 1.1 简介 Nacos是一款阿里巴巴推出的一款微服务发现.配置管理框架.我们本次对将对它的服务注册发现功能进行简单源码分析. 1.2 流程 Nacos的分析分为两部分,一部分是我们的客 ...
- 快速搭建 SpringCloud Alibaba Nacos 配置中心!
Spring Cloud Alibaba 是阿里巴巴提供的一站式微服务开发解决方案,目前已被 Spring Cloud 官方收录.而 Nacos 作为 Spring Cloud Alibaba 的核心 ...
- 注册中心ZooKeeper,Eureka,Consul,Nacos对比
简介 服务注册中心本质上是为了解耦服务提供者和服务消费者.对于任何一个微服务,原则上都应存在或者支持多个提供者,这是由微服务的分布式属性决定的.更进一步,为了支持弹性扩缩容特性,一个微服务的提供者 ...
- SpringCloud Alibaba实战(7:nacos注册中心管理微服务)
源码地址:https://gitee.com/fighter3/eshop-project.git 持续更新中-- 在上一节我们已经完成了Nacos Server的本地部署,这一节我们学习如何将Nac ...
- Spring Cloud 系列之 Alibaba Nacos 注册中心(一)
前言 从本章节开始,我们学习 Spring Cloud Alibaba 相关微服务组件. Spring Cloud Alibaba 介绍 Spring Cloud Alibaba 致力于提供微服务开发 ...
- 11.SpringCloud Alibaba
SpringCloud的几大痛点 SpringCloud部分组件停止维护和更新,给开发带来不便 SpringCloud部分环境搭建复杂,没有完善的可视化界面,我们需要大量的二次开发和定制 Spring ...
随机推荐
- 每天5分钟复习OpenStack(九)存储发展史
上一章节我们介绍了使用本地硬盘做kvm的存储池,这章开始将介绍下存储的发展历程,并介绍什么是分布式存储,为什么HDFS为有中心节点的分布式存储? 1.存储发展 在单机计算时代(大型机.小型机.微机), ...
- 从HumanEval到CoderEval: 你的代码生成模型真的work吗?
本文分享自华为云社区<从HumanEval到CoderEval: 你的代码生成模型真的work吗?>,作者:华为云软件分析Lab . 本文主要介绍了一个名为CoderEval的代码生成大模 ...
- L3-011 直捣黄龙
#include<bits/stdc++.h> using namespace std; using pii = pair<int, int>; const int N = 3 ...
- 背包DP全类型
AcWing 2. 01背包问题 #include <iostream> #include <algorithm> using namespace std; const int ...
- VisionPro学习笔记(5)——极轴展开工具PolarUnwrapTool
如果需要了解其他图像处理的文章,请移步小编的GitHub地址 传送门:请点击我 如果点击有误:https://github.com/LeBron-Jian/ComputerVisionPractice ...
- 微盟&致远OA&聚水潭&YonSuite系统对接集成整体解决方案
前言:大部分的企业都可能只用一套系统组织架构复杂,业务流程繁琐,内部同时有OA系统.BI系统.ERP系统......且各个系统都需要独立登陆,造成IT部门数据监管困难!如何在同一套中台系统上关联多管理 ...
- java集合框架(二)LinkedList的常见使用
@[toc]## 一.什么是LinkedList LinkedList是Java中的一个双向链表. 它实现了List和Deque接口,在使用时可以像List一样使用元素索引,也可以像Deque一样使用 ...
- AntDesignBlazor示例——列表查询条件
本示例是AntDesign Blazor的入门示例,在学习的同时分享出来,以供新手参考. 示例代码仓库:https://gitee.com/known/AntDesignDemo 1. 学习目标 重构 ...
- Centos8.4离线安装JDK+Tomcat+MySQL8.0+Nginx
一.安装JDK 注:以下命令环境在Xshell中进行. 1.查询出系统自带的OpenJDK及版本 rpm -qa | grep jdk 2.如果显示已安装openjdk则对其进行卸载. 输入:rpm ...
- 湖南省网络攻防邀请赛 RE 题解
ez_apkk 解题过程: 将apk拖入jadx,查看MainActivity,发现是简单RC4加密,密钥是"55667788",最后再将加密结果+1 public String ...