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的更多相关文章

  1. SpringCloud Alibaba Nacos服务注册与配置管理

    Nacos SpringCloud Alibaba Nacos是一个狗抑郁构建云原生应用的动态服务发现.配置管理和服务管理平台. Nacos:Dynamic Naming and Configurat ...

  2. SpringCloud Alibaba Nacos 服务注册

    业务服务接入Nacos服务治理中心 启动Nacos访问地址为:http://101.200.201.195:8848/nacos/ 创建bom工程用于管理依赖(下方附加源码地址) 准备工作完成后开始接 ...

  3. 微服务实战系列(四)-注册中心springcloud alibaba nacos

    1.场景描述 因要用到微服务,关于注册中心这块,与同事在技术原型上做了讨论,初步定的方案是使用:阿里巴巴的nacos+springcloud gateway,下面表格是同事整理的注册中心对比,以前用的 ...

  4. SpringCloud Alibaba Nacos 服务治理中心

    目录 一.什么是Nacos? 二.Nacos能干吗? 三.Nacos关键特性 四.Nacos中的基本概念 五.如何安装部署Nacos? 六.Nacos数据持久化 一.什么是Nacos? 英文全称Dyn ...

  5. SpringCloud Alibaba Nacos注册中心源码浅析

    一.前置了解 1.1 简介 Nacos是一款阿里巴巴推出的一款微服务发现.配置管理框架.我们本次对将对它的服务注册发现功能进行简单源码分析. 1.2 流程 Nacos的分析分为两部分,一部分是我们的客 ...

  6. 快速搭建 SpringCloud Alibaba Nacos 配置中心!

    Spring Cloud Alibaba 是阿里巴巴提供的一站式微服务开发解决方案,目前已被 Spring Cloud 官方收录.而 Nacos 作为 Spring Cloud Alibaba 的核心 ...

  7. 注册中心ZooKeeper,Eureka,Consul,Nacos对比

    简介 ​ 服务注册中心本质上是为了解耦服务提供者和服务消费者.对于任何一个微服务,原则上都应存在或者支持多个提供者,这是由微服务的分布式属性决定的.更进一步,为了支持弹性扩缩容特性,一个微服务的提供者 ...

  8. SpringCloud Alibaba实战(7:nacos注册中心管理微服务)

    源码地址:https://gitee.com/fighter3/eshop-project.git 持续更新中-- 在上一节我们已经完成了Nacos Server的本地部署,这一节我们学习如何将Nac ...

  9. Spring Cloud 系列之 Alibaba Nacos 注册中心(一)

    前言 从本章节开始,我们学习 Spring Cloud Alibaba 相关微服务组件. Spring Cloud Alibaba 介绍 Spring Cloud Alibaba 致力于提供微服务开发 ...

  10. 11.SpringCloud Alibaba

    SpringCloud的几大痛点 SpringCloud部分组件停止维护和更新,给开发带来不便 SpringCloud部分环境搭建复杂,没有完善的可视化界面,我们需要大量的二次开发和定制 Spring ...

随机推荐

  1. IIS和PHP相关权限问题及解决方案_500错误_500.19 - Internal Server Error与401未授权错误_401.3 - Unauthorized

    在IIS添加网站(假设站点为xxx.yyy.com,本例假设IIS版本为7.5或以上),如果采用IIS默认配置,会在创建站点同时创建相应同名的"应用程序池"(也是xxx.yyy.c ...

  2. disabled_button

    根据题目提示,是前端的知识 进入页面,flag按钮灰了按不下去 右键检查发现按钮地方的样式,发现有一个disabled,这里就直接把他删掉点击回车就可以点击了

  3. Petals

    ------------恢复内容开始------------ 打开发现一堆地址冒红 滑倒后面发现E8,根据经验应该是花指令考点 然后D-->nop-->C-->P得到正常结果 然后第 ...

  4. MySQL IFNULL函数

    MySQL IFNULL函数简介 MySQL IFNULL函数是MySQL控制流函数之一,它接受两个参数,如果不是NULL,则返回第一个参数. 否则,IFNULL函数返回第二个参数. 两个参数可以是文 ...

  5. three.js 汽车行驶效果

    实现原理是使用TWEEN.Tween实现动画效果 实现 汽车模型加载 使用Promise编写模型的异步加载方法 Car.prototype.loadCar = function (position, ...

  6. 光学测量 PPG

    参考来源:ADI官网技术文章.知乎(hxl695822705.KingPo-张超.深圳加1健康科技 ) 现状 PPG测量心率.血氧的技术距今发展快100年,影响心率.血氧测量准确度的因素主要有心率传感 ...

  7. Activity发送信息给Fragment

    在MainActivity中设置发送的信息,在fragment中接收, @Override public void onClick(View view) { switch (view.getId()) ...

  8. pytest框架学习-标签@pytest.mark.

    标签 自定义标签(区分大小写) 可以标记测试用例,对测试用例进行分组,有利于对测试用例进行筛选. 比如:给用例打标为API,代表接口自动化的用例,打标方法为@pytest.mark.API,打标后,需 ...

  9. MinIO客户端之cat

    MinIO提供了一个命令行程序mc用于协助用户完成日常的维护.管理类工作. 官方资料 mc cat 使用cat命令输出本地硬盘上的文本文件的内容至控制台. ./mc cat ./local.json ...

  10. Docker + Jenkins 如何实现自动化部署?

    Docker + Jenkins 如何实现自动化部署? 一. 概述 实验室每次项目发布测试时,都要手动本地打包好了然后上传到服务器,替换原来nginx下面的目录文件,十分麻烦和繁琐.这次就来优化一下, ...