目录

  • 1、Nacos简介
  • 2、使用 Docker 快速搭建 Nacos 1.4
    • 2.1 从 git 上 clone 项目:
    • 2.2 clone 完成后,进入 naocs-docker 目录:
    • 2.3 执行 standalone-derby.yaml 脚本启动容器:
    • 2.4 用于后期其他需要,务必开启 firewall 防火墙端口:
    • 2.5 登录 Nacos 控制台,默认用户名为 nacos,密码为 nacos:
  • 3、在 Spring 项目中引入 Nacos 客户端
    • 3.1 启动服务发现
    • 3.2 启动配置管理
  • 4、Nacos 控制台配合项目实战
    • 4.1 命名空间
    • 4.2 动态配置
    • 4.3 服务管理
    • 4.4 登录管理
  • 5、参考链接

1、Nacos简介

Nacos 致力于帮助您发现、配置和管理微服务。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据及流量管理。
Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。 Nacos 是构建以“服务”为中心的现代应用架构 (例如微服务范式、云原生范式) 的服务基础设施。

  • 服务发现和服务健康监测

Nacos 支持基于 DNS 和基于 RPC 的服务发现。服务提供者使用 原生SDK、OpenAPI、或一个独立的Agent TODO注册 Service 后,服务消费者可以使用DNS TODO 或HTTP&API查找和发现服务。
Nacos 提供对服务的实时的健康检查,阻止向不健康的主机或服务实例发送请求。Nacos 支持传输层 (PING 或 TCP)和应用层 (如 HTTP、MySQL、用户自定义)的健康检查。 对于复杂的云环境和网络拓扑环境中(如 VPC、边缘网络等)服务的健康检查,Nacos 提供了 agent 上报模式和服务端主动检测2种健康检查模式。Nacos 还提供了统一的健康检查仪表盘,帮助您根据健康状态管理服务的可用性及流量。

  • 动态配置服务

动态配置服务可以让您以中心化、外部化和动态化的方式管理所有环境的应用配置和服务配置。
动态配置消除了配置变更时重新部署应用和服务的需要,让配置管理变得更加高效和敏捷。
配置中心化管理让实现无状态服务变得更简单,让服务按需弹性扩展变得更容易。
Nacos 提供了一个简洁易用的UI (控制台样例 Demo) 帮助您管理所有的服务和应用的配置。Nacos 还提供包括配置版本跟踪、金丝雀发布、一键回滚配置以及客户端配置更新状态跟踪在内的一系列开箱即用的配置管理特性,帮助您更安全地在生产环境中管理配置变更和降低配置变更带来的风险。

  • 动态 DNS 服务

动态 DNS 服务支持权重路由,让您更容易地实现中间层负载均衡、更灵活的路由策略、流量控制以及数据中心内网的简单DNS解析服务。动态DNS服务还能让您更容易地实现以 DNS 协议为基础的服务发现,以帮助您消除耦合到厂商私有服务发现 API 上的风险。
Nacos 提供了一些简单的 DNS APIs TODO 帮助您管理服务的关联域名和可用的 IP:PORT 列表.

  • 服务及其元数据管理

Nacos 能让您从微服务平台建设的视角管理数据中心的所有服务及元数据,包括管理服务的描述、生命周期、服务的静态依赖分析、服务的健康状态、服务的流量管理、路由及安全策略、服务的 SLA 以及最首要的 metrics 统计数据。

2、使用 Docker 快速搭建 Nacos 1.4

2.1 从 git 上 clone 项目:

git clone https://github.com/nacos-group/nacos-docker.git

2.2 clone 完成后,进入 naocs-docker 目录:

cd nacos-docker/example


Nacos支持三种部署模式:

  • 单机模式 - 用于测试和单机试用(单机模式支持mysql)。
  • 集群模式 - 用于生产环境,确保高可用。
  • 多集群模式 - 用于多数据中心场景。

为了配置简便,立即可用,我们里选择单机部署模式,而且不用mysql,来看下脚本内容。
standalone-derby.yaml

version: "2"
services:nacos:image: nacos/nacos-server:latestcontainer_name: nacos-standaloneenvironment:- PREFER_HOST_MODE=hostname- MODE=standalonevolumes:- ./standalone-logs/:/home/nacos/logs- ./init.d/custom.properties:/home/nacos/init.d/custom.propertiesports:- "8848:8848"prometheus:container_name: prometheusimage: prom/prometheus:latestvolumes:- ./prometheus/prometheus-standalone.yaml:/etc/prometheus/prometheus.ymlports:- "9090:9090"depends_on:- nacosrestart: on-failuregrafana:container_name: grafanaimage: grafana/grafana:latestports:- 3000:3000restart: on-failure

2.3 执行 standalone-derby.yaml 脚本启动容器:

docker-compose -f standalone-derby.yaml up

2.4 用于后期其他需要,务必开启 firewall 防火墙端口:

firewall-cmd --zone=public --add-port=8848/tcp --permanent

firewall-cmd --reload

2.5 登录 Nacos 控制台,默认用户名为 nacos,密码为 nacos:

http://(安装Nacos机器的IP):8848/nacos


Nacos 控制台里有好多功能,如何使用呢?这里我们先不急,先来配置Spring Boot项目客户端。

3、在 Spring 项目中引入 Nacos 客户端

这里有两部分内容 Nacos Discovery(服务发现)和 Nacos Config(配置管理)

3.1 启动服务发现

  • 添加 pom 文件依赖:
        <dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId></dependency>
  • 在 application.yml 添加配置:
server:port: 8080spring:application:name: (项目名称)-servicecloud:nacos:discovery:server-addr: (安装Nacos机器的IP):8848
  • 添加注解 @EnableDiscoveryClient 开启服务注册发现功能:
@EnableDiscoveryClient
@SpringBootApplication
public class TestServiceApplication {public static void main(String[] args) {SpringApplication.run(TestServiceApplication.class, args);}}

3.2 启动配置管理

  • 添加 pom 文件依赖
        <dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId></dependency>
  • 在 bootstrap.yml 添加配置

注意这里看清楚是 bootstrap.yml,请读者自行百度 Spring Boot 项目 application.yml 和 bootstrap.yml 的区别。

spring:profiles:active: devapplication:name: (项目名称)-servicecloud:nacos:config:server-addr: (安装Nacos机器的IP):8848file-extension: properties

**说明:**之所以需要配置 spring.application.name ,是因为它是构成 Nacos 配置管理 dataId 字段的一部分。

在 Nacos Spring Cloud 中,dataId 的完整格式如下:

${prefix}-${spring.profiles.active}.${file-extension}
  • prefix 默认为 spring.application.name 的值,也可以通过配置项
    spring.cloud.nacos.config.prefix 来配置。
  • spring.profiles.active 即为当前环境对应的 profile,当 spring.profiles.active 为空时,对应的连接符 - 也将不存在,dataId 的拼接格式变成 prefix.{prefix}.prefix.{file-extension}
  • file-exetension 为配置内容的数据格式,可以通过配置项 spring.cloud.nacos.config.file-extension 来配置。目前只支持 properties 和 yaml 类型。

Nacos配置到这里,我们已经能启动自己的项目了,启动的项目会显示在控制台的服务列表里

4、Nacos 控制台配合项目实战

4.1 命名空间

命名空间 用于进行租户粒度的配置隔离。不同的命名空间下,可以存在相同的 Group 或 Data ID 的配置。Namespace 的常用场景之一是不同环境的配置的区分隔离,例如开发测试环境和生产环境的资源(如配置、服务)隔离等。

Nacos 基于 Namespace 帮助用户逻辑隔离多个命名空间,这可以帮助用户更好的管理测试、预发、生产等多环境服务和配置,让每个环境的同一个配置(如数据库数据源)可以定义不同的值。

  • 我们添加一个名字叫 dev 的命名空间(默认有个 public):

  • 此时,配置列表里就会多出一个命名空间为 dev 的配置分组,不同环境分出不同配置

    Spring 项目若要读取对应的配置,则对应修改我们的 bootstrap.yml 配置
spring:profiles:active: devapplication:name: (项目名称)-servicecloud:nacos:config:namespace: b96b8faf-3f04-4f6f-a321-aae6f0a2414bserver-addr: (安装Nacos机器的IP):8848file-extension: properties

4.2 动态配置

动态配置 系统配置的编辑、存储、分发、变更管理、历史版本管理、变更审计等所有与配置相关的活动。一个具体的可配置的参数与其值域,通常以 param-key=param-value 的形式存在。例如我们常配置系统的日志输出级别(logLevel=INFO|WARN|ERROR) 就是一个配置项。

  • 配置集 ID

Nacos 中的某个配置集的 ID。配置集 ID 是组织划分配置的维度之一。Data ID 通常用于组织划分系统的配置集。一个系统或者应用可以包含多个配置集,每个配置集都可以被一个有意义的名称标识。Data ID 通常采用类 Java 包(如 com.taobao.tc.refund.log.level)的命名规则保证全局唯一性。此命名规则非强制。

  • 配置分组

Nacos 中的一组配置集,是组织配置的维度之一。通过一个有意义的字符串(如 Buy 或 Trade )对配置集进行分组,从而区分 Data ID 相同的配置集。当您在 Nacos 上创建一个配置时,如果未填写配置分组的名称,则配置分组的名称默认采用 DEFAULT_GROUP 。配置分组的常见场景:不同的应用或组件使用了相同的配置类型,如 database_url 配置和 MQ_topic 配置。

(1)我们选择 dev 命名空间,添加一个 Data ID 为 gateway-service-dev.properties 的配置项(按照上文的规则prefix−{prefix}-prefix−{spring.profiles.active}.${file-extension}),Group 设置为 README_GROUP

mine.name=baicai
mine.age=18



(2)对应修改我们的 bootstrap.yml 配置

spring:profiles:active: devapplication:name: (项目名称)-servicecloud:nacos:config:group: README_GROUPnamespace: b96b8faf-3f04-4f6f-a321-aae6f0a2414bserver-addr: (安装Nacos机器的IP):8848file-extension: properties

(3)在我们的项目中使用 @RefreshScope 和 @Value 来读取对应的配置(冒号后边的是默认值)

@RefreshScope
@RestController
@RequestMapping("/config")
public class ConfigController {@Value("${mine.name:none}")private String name;@Value("${mine.age:0}")private String age;@RequestMapping("/get")public String get() {return name + ": " + age;}}

(4)访问下这个请求,看下配置内容是不是已经同步到项目中

#### 配置测试
GET http://localhost:8080/config/get
Accept: */*
Cache-Control: no-cache

请求得到结果:

baicai: 18

我们去修改下配置的内容,看看是否会实时同步到项目中:

mine.name=baicai-2
mine.age=18-2


请求得到结果:

baicai-2: 18-2

可以清晰的看见项目中的日志:

2021-02-07 16:04:29.855  INFO 23972 --- [21-aae6f0a2414b] o.s.c.e.event.RefreshEventListener       : Refresh keys changed: [mine.name, mine.age]
2021-02-07 16:04:29.856  INFO 23972 --- [21-aae6f0a2414b] c.a.nacos.client.config.impl.CacheData   : [fixed-192.168.138.131_8848-b96b8faf-3f04-4f6f-a321-aae6f0a2414b] [notify-ok] dataId=gateway-service-dev.properties, group=README_GROUP, md5=f9c5b973de2fc78a9314efdef195dfad, listener=com.alibaba.cloud.nacos.refresh.NacosContextRefresher$1@2279ad91
2021-02-07 16:04:29.856  INFO 23972 --- [21-aae6f0a2414b] c.a.nacos.client.config.impl.CacheData   : [fixed-192.168.138.131_8848-b96b8faf-3f04-4f6f-a321-aae6f0a2414b] [notify-listener] time cost=1719ms in ClientWorker, dataId=gateway-service-dev.properties, group=README_GROUP, md5=f9c5b973de2fc78a9314efdef195dfad, listener=com.alibaba.cloud.nacos.refresh.NacosContextRefresher$1@2279ad91

(5)如果我这次改动的配置文件内容是错的,我又不太记得上次正确的是什么了,我想恢复上次的内容怎么办?
没关系,nacos 为我们提供了 30 天的配置文件修改记录:

我们马上来尝试回滚下配置:

请求得到结果:

baicai: 18

终于,正确的配置又回来了。

4.3 服务管理

服务管理 开发者或者运维人员往往需要在服务注册后,通过友好的界面来查看服务的注册情况,包括当前系统注册的所有服务和每个服务的详情。并在有权限控制的情况下,进行服务的一些配置的编辑操作。Nacos在这个版本开放的控制台的服务发现部分,主要就是提供用户一个基本的运维页面,能够查看、编辑当前注册的服务。

(1)查看服务的详情参数:

(2)服务流量权重支持、服务元数据管理、服务优雅上下线

  • 服务流量权重支持

Nacos 为用户提供了流量权重控制的能力,同时开放了服务流量的阈值保护,以帮助用户更好的保护服务服务提供者集群不被意外打垮。如下图所以,可以点击实例的编辑按钮,修改实例的权重。如果想增加实例的流量,可以将权重调大,如果不想实例接收流量,则可以将权重设为0。

  • 服务元数据管理

Nacos提供多个维度的服务元数据的暴露,帮助用户存储自定义的信息。这些信息都是以K-V的数据结构存储,在控制台上,会以k1=v1,k2=v2这样的格式展示。类似的,编辑元数据可以通过相同的格式进行。例如服务的元数据编辑,首先点击服务详情页右上角的“编辑服务”按钮,然后在元数据输入框输入:version=1.0,env=prod。

  • 服务优雅上下线

Nacos还提供服务实例的上下线操作,在服务详情页面,可以点击实例的“上线”或者“下线”按钮,被下线的实例,将不会包含在健康的实例列表里。

4.4 登录管理

  • 创建新用户:
  • 用户绑定角色:
  • 角色添加权限:

5、参考链接

[01] 掘金 - Java Spring Cloud Alibaba Nacos

513、Java Spring Cloud Alibaba -【Spring Cloud Alibaba Nacos】 2021.08.30相关推荐

  1. 【cocos2dx面试题干货】--2021年最新cocos2dx面试干货(引擎篇)

                [cocos2dx面试题干货]--2021年度最新cocos2dx面试干货(引擎篇 )     大家好,我是Lampard~~   经过春招一番艰苦奋战之后,我终于是进入了心仪 ...

  2. 【专升本计算机】2021年甘肃省专升本计算机全真模拟试题(五)

    [专升本计算机]2021年甘肃省专升本计算机全真模拟试题(一) [专升本计算机]2021年甘肃省专升本计算机全真模拟试题(二) [专升本计算机]2021年甘肃省专升本计算机全真模拟试题(三) [专升本 ...

  3. 【专升本计算机】2021年甘肃省专升本计算机全真模拟试题(四)

    [专升本计算机]2021年甘肃省专升本计算机全真模拟试题(一) [专升本计算机]2021年甘肃省专升本计算机全真模拟试题(二) [专升本计算机]2021年甘肃省专升本计算机全真模拟试题(三) [专升本 ...

  4. 【专升本计算机】2021年甘肃省专升本计算机全真模拟试题(二)

    [专升本计算机]2021年甘肃省专升本计算机全真模拟试题(一) [专升本计算机]2021年甘肃省专升本计算机全真模拟试题(二) [专升本计算机]2021年甘肃省专升本计算机全真模拟试题(三) [专升本 ...

  5. 【专升本计算机】2021年甘肃省专升本计算机全真模拟试题(一)

    [专升本计算机]2021年甘肃省专升本计算机全真模拟试题(一) [专升本计算机]2021年甘肃省专升本计算机全真模拟试题(二) [专升本计算机]2021年甘肃省专升本计算机全真模拟试题(三) [专升本 ...

  6. 【专升本计算机】2021年甘肃省专升本计算机全真模拟试题(三)

    [专升本计算机]2021年甘肃省专升本计算机全真模拟试题(一) [专升本计算机]2021年甘肃省专升本计算机全真模拟试题(二) [专升本计算机]2021年甘肃省专升本计算机全真模拟试题(三) [专升本 ...

  7. Spring 官方简介【spring】

    1.Spring 1.1.简介 Spring:春天----->给软件行业带来了春天! 2002,首次推出了Spring框架的雏形:interface21框架! Spring框架即以interfa ...

  8. Spring框架学习【从入门到精通】

    文章目录 初识Spring框架 时代变迁 Spring的野心 官网 框架组成 核心概念 三大核心组件的关系 主要jar组成 Spring框架两大核心:IoC和DI 概念 IoC DI IoC的XML方 ...

  9. 牛客刷题-Java面试题库【动态更新添加题目】(2023.06.19更新)

    讲在前面 ✨ 牛客刷题日记–理解为重中之重 刷题一方面是持续的了解到自己哪方面比较欠缺,另一方面也是从各大厂的面试题可以看出当前所需的技术栈的偏重点,持续的巩固基础和查漏补缺,一如代码深似海–学无止境 ...

最新文章

  1. 原生JS修改html内容不影响绑定的点击事件 请认准insertAdjacentHTML、insertAdjacentText方法
  2. Mysql优化之开山篇
  3. 共阳极数码时钟c语言程序,基于51单片机C语言数字钟程序.doc
  4. oracle定时任务(dbms_job)
  5. 创建优秀团队文化的四大要点
  6. 浅谈 Mybatis中的 ${ } 和 #{ }的区别
  7. [BZOJ 3028]食物(生成函数)
  8. JS兼容性问题:window.locatin.href is not a function
  9. 《游戏设计艺术(第二版)》第一、二章个人学习
  10. 维修管理系统微信小程序部署流程
  11. 用VC资源动态链接库解决国际化问题
  12. android ios 夜间模式切换,iOS-夜间模式(换肤设置)
  13. 什么是user agent(用户代理)
  14. 8.互 联 网 上 的 音 频 和 视 频 服 务
  15. Ext js 下拉框模糊匹配查询,并支持反复输入检索
  16. 如何让win XP实现自动登陆
  17. 使用selenium模拟登录解决滑块验证问题
  18. 社交网站如何免接口启用QQ微信“一键登录”网站
  19. 骑砍2 游戏文件修改漫谈
  20. 打印机显示无法连接计算机,网络打印提示:Windows无法连接到打印机,请检查打印机名并重试...

热门文章

  1. 一口气带你学会Redis升级后的几种数据类型,效率daydayup
  2. 聪明人用方格笔记本-读书笔记
  3. 0 win10重装partition_gpt分区无法安装win10的根本原因
  4. Date时间里的GMT是什么意思
  5. 在华为云服务器上用WP搭建公司官网
  6. Latex排版,表格标题总是出现在下方的解决方案
  7. 用Photoshop制作一张“油画”
  8. pythonbmi代码_用python写一个BMI体制指数测试
  9. 小白科研笔记:简析SOTA目标检测算法3D-CVF
  10. 牛年第一瓜!阿里女员工被初中文化男子骗走 500 多万元。。。