Spring Cloud Alibaba — Nacos 构建服务注册中心
文章目录
- Nacos Server
- 下载
- 启动
- 登录
- 创建命名空间
- Nacos Client
- 启动样例
- Nacos 服务发现配置项
- 集成 OpenFeign 远程接口调用
- 添加 OpenFeign 依赖
- 开启 @EnableFeignClients 注解
- 编写远程服务接口
- 远程接口调用
- 集成 Sentinel 熔断降级
- 添加 Sentinel 依赖
- 开启 Sentinel 熔断降级
- 编写降级回调类
- 添加 fallback 属性
- 集成 GateWay 动态路由

Nacos 官网:https://nacos.io
Nacos GitHub 地址:https://github.com/alibaba/nacos
spring-cloud-alibaba GitHub 地址:https://github.com/alibaba/spring-cloud-alibaba
Spring Cloud Alibaba 组件版本说明:https://github.com/alibaba/spring-cloud-alibaba/wiki/版本说明
Nacos(Naming and Configuration Service,命名和配置服务)是一个动态服务发现、配置管理和服务治理的一站式解决方案,致力于快速构建、部署和管理微服务平台。
Nacos的主要功能包括:
- 服务发现:Nacos提供了一个基于DNS和HTTP的服务发现机制,使得服务之间能够轻松地找到对方并建立连接。
- 服务治理:Nacos提供了丰富的服务治理功能,包括熔断、限流和负载均衡等,帮助您构建稳定、可靠的微服务系统。
- 配置管理:Nacos支持中心化、外部化和动态化的配置管理,可以为微服务应用提供实时的配置更新,允许在不重启应用的情况下更新配置。
Nacos Server
下载
查看 Spring Cloud Alibaba 的各组件版本:
| Spring Cloud Alibaba Version | Sentinel Version | Nacos Version | RocketMQ Version | Dubbo Version | Seata Version |
|---|---|---|---|---|---|
| 2022.0.0.0-RC2 | 1.8.6 | 2.2.1 | 4.9.4 | ~ | 1.7.0-native-rc2 |
| 2021.0.5.0 | 1.8.6 | 2.2.0 | 4.9.4 | ~ | 1.6.1 |
| 2.2.10-RC1 | 1.8.6 | 2.2.0 | 4.9.4 | ~ | 1.6.1 |
| 2022.0.0.0-RC1 | 1.8.6 | 2.2.1-RC | 4.9.4 | ~ | 1.6.1 |
| 2.2.9.RELEASE | 1.8.5 | 2.1.0 | 4.9.4 | ~ | 1.5.2 |
进入 Nacos GitHub,点击【Tags】:

进入对应的【Tag】,下载对应的版本文件:

Nacos 下载完成:

启动
将压缩文件进行解压,目录如下:

创建数据库【nacos】:

导入 \nacos\conf 目录下的 nacos-mysql.sql 数据库文件:

查看数据库内容,包含和配置文件,命名空间,用户有关的数据表:

修改 \nacos\conf 目录下的 application.properties 配置文件:

修改启动模式,将集群模式【cluster】改为单机模式【standalone】:

Windows 运行 nacos\bin 目录下的 startup.cmd 文件:

登录
访问链接:http://localhost:8848/nacos,使用默认账号密码登录【nacos:nacos】:

创建命名空间
依次点击左侧菜单【命名空间→新建命名空间】,输入表格内容,点击【确定】即可:

Nacos Client
启动样例
创建对应版本的 SpringBoot 项目:

选择相关依赖,如 web、Nacos Service Discovery:

Pom.xml 中依赖如下:
<properties><!--spring-boot 版本--><spring-boot.version>2.3.12.RELEASE</spring-boot.version><!--spring-cloud-alibaba 版本--><spring-cloud-alibaba.version>2.2.9.RELEASE</spring-cloud-alibaba.version>
</properties>
<dependencies><!--web 依赖--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!--spring-cloud-alibaba-nacos 依赖--><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId></dependency>
</dependencies>
<dependencyManagement><dependencies><!-- spring-boot 依赖管理--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-dependencies</artifactId><version>${spring-boot.version}</version><type>pom</type><scope>import</scope></dependency><!-- spring-cloud-alibaba 依赖管理--><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-alibaba-dependencies</artifactId><version>${spring-cloud-alibaba.version}</version><type>pom</type><scope>import</scope></dependency></dependencies>
</dependencyManagement>
YAML 配置如下:
server:port: 8080
spring:application:name: nacos-client-acloud:nacos:server-addr: localhost:8848 # nacos server 的地址 默认localhost:8848username: nacospassword: nacosdiscovery: # 注册相关配置namespace: 9889d187-8b66-41f9-a554-d3d0635c0ee9 # 命名空间的 idgroup: A_GROUP # 分组名称,默认为:DEFAULT_GROU
启动项目,显示 nacos 注册, 默认组 nacos-client-a 192.168.152.1:8080 注册完成:

查看 Nacos Server 中的服务列表:

Nacos 服务发现配置项
nacos.discovery 是 Nacos 中与服务注册与发现相关的配置项前缀,包含以下配置:
| 配置项 | Key | 默认值 | 说明 |
|---|---|---|---|
| 服务注册中心地址 | spring.cloud.nacos.discovery.server-addr | 无 | 多个地址可以使用逗号隔开 |
| 命名空间 | spring.cloud.nacos.discovery.namespace | 实现多租户的注册与发现(区分隔离) | |
| 服务名 | spring.cloud.nacos.discovery.service | ${spring.application.name} | 服务列表的服务名称 |
| 服务分组 | spring.cloud.nacos.discovery.group | DEFAULT_GROUP | 服务的分组信息 |
| 权重 | spring.cloud.nacos.discovery.weight | 1 | 取值范围1-100,数值越大,权重越大 |
| 网卡名 | spring.cloud.nacos.discovery.network-interface | 无 | 当 IP 未配置时,注册的 IP 为此网卡所对应的IP地址,如果此项也未配置,则默认取第一块网卡的地址 |
| 注册 IP 地址 | spring.cloud.nacos.discovery.ip | 无 | 优先级最高 |
| 注册端口 | spring.cloud.nacos.discovery.port | -1 | 默认情况下不用配置,会自动探测 |
| 阿里云账号 | spring.cloud.nacos.discovery.access-key | 无 | 当要上阿里云时,阿里云上面的一个云账号名 |
| 阿里云密码 | spring.cloud.nacos.discovery.secret-key | 无 | 当要上阿里云时,阿里云上面的一个云账号密码 |
| 元数据 | spring.cloud.nacos.discovery.metadata | 无 | 服务实例的元数据信息,使用 Map 格式配置 |
| 日志文件名 | spring.cloud.nacos.discovery.log-name | 无 |
集成 OpenFeign 远程接口调用
添加 OpenFeign 依赖
添加 spring-cloud 和 spring-cloud-openfeign 依赖:
<properties><!--spring-cloud 版本--><spring-cloud.version>Hoxton.SR12</spring-cloud.version>
</properties>
<dependencies><!--spring-cloud-openfeign 依赖--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-openfeign</artifactId></dependency>
</dependencies>
<dependencyManagement><dependencies><!-- spring-cloud 依赖管理--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-dependencies</artifactId><version>${spring-cloud.version}</version><type>pom</type><scope>import</scope></dependency></dependencies>
</dependencyManagement>
开启 @EnableFeignClients 注解
@EnableFeignClients //开启 Feign
@EnableDiscoveryClient //开启服务发现
@SpringBootApplication
public class NacosApplication {public static void main(String[] args) {SpringApplication.run(NacosApplication.class, args);}}
编写远程服务接口
@FeignClient(value = "nacos-user-service") //调用服务的服务名称
public interface UserFeignService {@GetMapping("info") //调用的服务接口String getInfo();}
远程接口调用
编写 UserController 接口调用服务:
@RestController
public class UserController {@Autowiredprivate UserFeignService userFeignService;@GetMapping("userInfo")public String getUserInfo(){return userFeignService.getInfo();}}
注:服务之前需要在同一个命名空间和分组下,否则不能发现服务(环境隔离)。
集成 Sentinel 熔断降级
添加 Sentinel 依赖
<!--sentinel 依赖-->
<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
</dependency>
开启 Sentinel 熔断降级
在 YAML 配置文件中开启 Sentinel 熔断降级:
feign:sentinel:enabled: true
编写降级回调类
编写 UserFeignService 服务的接口实现类 UserFeignFallbackService:
/*** UserFeignService 降级回调类*/
@Component
public class UserFeignFallbackService implements UserFeignService {public String getInfo() {return UUID.randomUUID().toString();}
}
注:当 UserFeignService 中的接口调用出现异常或服务提供者下线时,就会调用 UserFeignFallbackService 类中对应得方法进行降级处理。
添加 fallback 属性
在 UserFeignService 接口的注解 @FeignClient 上添加 fallback 属性,指定降级回调类:
@FeignClient(value = "nacos-user-service",fallback = UserFeignFallbackService.class) //调用服务的服务名称
public interface UserFeignService {@GetMapping("info")String getInfo();}
集成 GateWay 动态路由
添加 Gateway 依赖:
<!--gateway 依赖-->
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>
YAML 文件中添加配置:
server:port: 8081spring:application:name: nacos-client-bcloud:nacos:server-addr: localhost:8848 # nacos server 的地址username: nacos # Nacos 用户名password: nacos # Nacos 密码discovery: # 注册相关配置namespace: 9889d187-8b66-41f9-a554-d3d0635c0ee9 # 命名空间的 idgroup: A_GROUP # 分组名称,默认为:DEFAULT_GROUPgateway:discovery:locator:enabled: true # 开启动态路由lower-case-service-id: true
添加 @EnableDiscoveryClient 注解:
@EnableDiscoveryClient
@SpringBootApplication
public class NacosGateWayApplication {public static void main(String[] args) {SpringApplication.run(NacosGateWayApplication.class, args);}}
相关文章:
Spring Cloud Alibaba — Nacos 构建服务注册中心
文章目录 Nacos Server下载启动登录创建命名空间 Nacos Client启动样例Nacos 服务发现配置项 集成 OpenFeign 远程接口调用添加 OpenFeign 依赖开启 EnableFeignClients 注解编写远程服务接口远程接口调用 集成 Sentinel 熔断降级添加 Sentinel 依赖开启 Sentinel 熔断降级编写…...
4.2 Spark SQL数据源 - 基本操作
一、默认数据源 案例演示读取Parquet文件 查看Spark的样例数据文件users.parquet 1、在Spark Shell中演示 启动Spark Shell 查看数据帧内容 查看数据帧模式 对数据帧指定列进行查询,查询结果依然是数据帧,然后通过write成员的save()方法写入HDF…...
事件相关功能磁共振波谱技术(fMRS)
导读 质子磁共振波谱(MRS)是一种非侵入性脑成像技术,用于测量不同神经化学物质的浓度。“单体素”MRS数据通常在几分钟内采集,然后对单个瞬态进行平均,从而测量神经化学物质浓度。然而,这种方法对更快速的神经化学物质的时间动态…...
跨境电商客户服务五步法
互联网技术的革新与升级对商务客服产生了巨大的影响,过去由在线客服与客户直接电联的单一服务形式被全渠道客服系统所替代。在电子商务时代,商家与客户之间的互动变得尤为重要:一方面,卖家通过分析客户喜好及消费趋向来针对性处理…...
hadoop环境配置及HDFS配置
环境与配置 ubuntu 20.04.6 /centos8hadoop 3.3.5 指令有部分不一样但是,配置是相同的 安装步骤 创建一个虚拟机,克隆三个虚拟机,master内存改大一点4G,salve内存1Gj修改主机名和配置静态ip(管理员模式下)) hostnamectl set-hostname node1 # 修改主机名 sudo passwd root …...
HTML中 meta的基本应用
meta 标签的定义 meta 标签是 head 部分的一个辅助性标签,提供关于 HTML 文档的元数据。它并不会显示在页面上,但对于机器是可读的。可用于浏览器(如何显示内容或重新加载页面),搜索引擎(SEO)或…...
docker compose 下 Redis 主备配置
1、准备两台虚拟机或者物理机 node1 IP:192.168.123.78 node2 IP:192.168.123.82 2、安装docker和docker compose 3、安装node1,配置docker-compose.yml version: 3services:redis-rs1:container_name: redis_node1image: redis:5.0.3rest…...
Tomcat ServletConfig和ServletContext接口概述
ServletConfig是一个接口,是Servlet规范中的一员 WEB服务器实现了ServletConfig接口,这里指的是Tomcat服务器 一个Servlet对象中有一个ServletConfig对象,Servlet和ServletConfig对象是一对一 ServletConfig对象是Tomcat服务器创建的…...
linux内核open文件流程
打开文件流程 本文基本Linux5.15 当应用层通过open api打开一个文件,内核中究竟如何处理? 本身用来描述内核中对应open 系统调用的处理流程。 数据结构 fdtable 一个进程可以打开很多文件, 内核用fdtable来管理这些文件。 include/linu…...
遗传算法讲解
遗传算法(Genetic Algorithm,GA) 是模拟生物在自然环境中的遗传和进化的过程而形成的自适应全局优化搜索算法。它借用了生物遗传学的观点,通过自然选择、遗传和变异等作用机制,实现各个个体适应性的提高。 基因型 (G…...
PostgreSQL修炼之道之高可用性方案设计(十六)
20 高可用性方案设计(一) 在一个生产系统中,通常都需要用高可用方案来保证系统的不间断运行。本章将详细介绍如何实现PostgreSQL数据库的高可用方案。 20.1 高可用架构基础 通常数据库的高可用方案都是让多个数据库服务器协同工作࿰…...
Bybit面经
缘起 V2EX有广告内推,看描述还挺不错 贴主5 年半工作经验,有两年大厂工作经历,20 年 11 月来到新加坡分公司开始工作 后来是猎头Jeff找的我 0318 主面 主要一个面试官是后端开发金融背景 某条金融线的负责人;其余是交叉面试。面…...
GORM---创建
目录 模型定义使用Create创建记录一次性创建多条数据批量插入数据时开启事务默认值问题 模型定义 定义一个PersonInfo结构体。 type PersonInfo struct {Id uint64 gorm:"column:id;primary_key;NOT NULL" json:"id"UserName string gorm:"co…...
高级查询 — 分组汇总
关于分组汇总 1.概述 将查询结果按某一列或者多列的值分组。 group by子句 分组后聚合函数将作用于每一个组,即每一组都有一个函数值。 语法 select 字段列表 from 表名 where 筛选条件 group by 分组的字段;select 字段列表 from 表名 group by 分组的字段 hav…...
【多线程】阻塞队列
1. 认识阻塞队列和消息队列 阻塞队列也是一个队列,也是一个特殊的队列,也遵守先进先出的原则,但是带有特殊的功能。 如果阻塞队列为空,执行出队列操作,就会阻塞等待,阻塞到另一个线程往阻塞队列中添加元素(…...
python2升级python3
查看当前版本 [roottest-01 node-v18.16.0]# python -V Python 2.7.5 安装依赖 [roottest-01 node-v18.16.0]# yum install -y gcc gcc-c zlib zlib-devel readline-devel 已加载插件:fastestmirror, langpacks Loading mirror speeds from cached hostfile * base…...
Apache Hudi初探(八)(与spark的结合)--非bulk_insert模式
背景 之前讨论的都是’hoodie.datasource.write.operation’:bulk_insert’的前提下,在这种模式下,是没有json文件的已形成如下的文件: /dt1/.hoodie_partition_metadata /dt1/2ffe3579-6ddb-4c5f-bf03-5c1b5dfce0a0-0_0-41263-0_202305282…...
Java之旅(九)
Java 循环语句 Java 中的循环语句包括 for、while 和 do-while,它们都可以用于实现循环结构。 for 语句用于循环执行一段代码块,直到给定的条件表达式的布尔值为 false。 for 语句的一般格式如下: for (initialization; condition; update…...
6年测试经验之谈,为什么要做自动化测试?
一、自动化测试 自动化测试是把以人为驱动的测试行为转化为机器执行的一种过程。 个人认为,只要能服务于测试工作,能够帮助我们提升工作效率的,不管是所谓的自动化工具,还是简单的SQL 脚本、批处理脚本,还是自己编写…...
二分法的边界条件 2517. 礼盒的最大甜蜜度
2517. 礼盒的最大甜蜜度 给你一个正整数数组 price ,其中 price[i] 表示第 i 类糖果的价格,另给你一个正整数 k 。 商店组合 k 类 不同 糖果打包成礼盒出售。礼盒的 甜蜜度 是礼盒中任意两种糖果 价格 绝对差的最小值。 返回礼盒的 最大 甜蜜度。 记录一…...
通义千问2.5-7B-Instruct开发者指南:API调用代码实例详解
通义千问2.5-7B-Instruct开发者指南:API调用代码实例详解 1. 快速了解通义千问2.5-7B-Instruct 通义千问2.5-7B-Instruct是阿里云在2024年9月发布的70亿参数指令微调模型,属于中等体量的全能型AI助手,最大的特点是完全开源且可以商用。 这…...
git -- 替换项目已经存在的 git 远程仓库地址
要将项目中的 Git 远程仓库地址修改为新的地址(http://192.168.3.32:9980/java/transketch-portal-backend),你可以按照以下步骤操作:方法一:使用 Git 命令行打开终端或命令提示符导航到你的项目目录运行以下命令&…...
数字化、智能化、移动化,人力资源系统革新的三大法宝!
人力资源系统革新,打造企业人才发展新引擎在当今竞争激烈的商业环境中,企业的人才发展成为了决定其成败的关键因素之一。然而,传统的人力资源管理系统往往存在着诸多问题,如流程繁琐、数据不精准、缺乏智能化等,这些问…...
人工智能|大模型 —— 量化 —— 一文搞懂大模型量化技术:GGUF、GPTQ、AWQ
目前关于大模型量化技术的文章层出不穷,但对其理论部分的深入探讨却相对较少。本文将对大模型量化技术进行系统性的介绍,并重点聚焦于理论层面的深入解析。 一、大模型量化基础 大模型量化的核心在于将模型参数的精度从较高的位宽(bit-width…...
STM32duino S2-LP无线驱动库:Sub-1GHz低功耗可靠通信实现
1. 项目概述STM32duino X-NUCLEO-S2868A2 是一款面向 STM32 平台的 Arduino 兼容库,专为驱动意法半导体(STMicroelectronics)推出的 X-NUCLEO-S2868A2 扩展板而设计。该扩展板核心搭载 S2-LP 超低功耗 Sub-1GHz 射频收发器芯片(型…...
SEO_从零开始,手把手教你制定SEO优化方案(126 )
<h2>SEO优化的基本概念</h2> <p>SEO,全称Search Engine Optimization,是搜索引擎优化的简称,旨在提高网站在搜索引擎中的自然排名,从而增加网站的可见度和流量。对于初学者来说,SEO可能听起来有点复…...
gemeni 生成图片的提示词
[System / Prompt]You are an illustration assistant specialized in creating hand-drawn cartoon-style infographics. Follow all rules below strictly and without deviation.🎨 STYLE RULES(风格规则)Use a pure hand-drawn illustrat…...
合宙 MCP 工具:TRAE AI 自然语言控制 Luatools 实操
合宙MCP工具基于 MCP 协议,实现 AI 大模型与 Luatools 的无缝连接,开发者通过简单 JSON 配置,就能在 TRAE 编辑器用自然语言操控 Luatools 完成固件下载、日志获取等操作,告别手动烧录的繁琐。 核心能力: 固件自动烧录…...
三节点zookeeper集群搭建
1、环境准备 1.1、 设置三台虚拟机主机名# 在node1执行 sudo hostnamectl set-hostname node1 # 在node2执行 sudo hostnamectl set-hostname node2 # 在node3执行 sudo hostnamectl set-hostname node31.2、修改hosts# 使用vim编辑hosts文件 sudo vim /etc/hosts # 添加以下内…...
ssm+java2026年毕设司库管理系统【源码+论文】
本系统(程序源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容一、选题背景关于企业理财与融资管理问题的研究,现有研究主要以大型企业ERP系统或通用财务管理软件为主,专门针对中…...
