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 类 不同 糖果打包成礼盒出售。礼盒的 甜蜜度 是礼盒中任意两种糖果 价格 绝对差的最小值。 返回礼盒的 最大 甜蜜度。 记录一…...
Vue记事本应用实现教程
文章目录 1. 项目介绍2. 开发环境准备3. 设计应用界面4. 创建Vue实例和数据模型5. 实现记事本功能5.1 添加新记事项5.2 删除记事项5.3 清空所有记事 6. 添加样式7. 功能扩展:显示创建时间8. 功能扩展:记事项搜索9. 完整代码10. Vue知识点解析10.1 数据绑…...
在rocky linux 9.5上在线安装 docker
前面是指南,后面是日志 sudo dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo sudo dnf install docker-ce docker-ce-cli containerd.io -y docker version sudo systemctl start docker sudo systemctl status docker …...
uni-app学习笔记二十二---使用vite.config.js全局导入常用依赖
在前面的练习中,每个页面需要使用ref,onShow等生命周期钩子函数时都需要像下面这样导入 import {onMounted, ref} from "vue" 如果不想每个页面都导入,需要使用node.js命令npm安装unplugin-auto-import npm install unplugin-au…...
微信小程序云开发平台MySQL的连接方式
注:微信小程序云开发平台指的是腾讯云开发 先给结论:微信小程序云开发平台的MySQL,无法通过获取数据库连接信息的方式进行连接,连接只能通过云开发的SDK连接,具体要参考官方文档: 为什么? 因为…...
多种风格导航菜单 HTML 实现(附源码)
下面我将为您展示 6 种不同风格的导航菜单实现,每种都包含完整 HTML、CSS 和 JavaScript 代码。 1. 简约水平导航栏 <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport&qu…...
重启Eureka集群中的节点,对已经注册的服务有什么影响
先看答案,如果正确地操作,重启Eureka集群中的节点,对已经注册的服务影响非常小,甚至可以做到无感知。 但如果操作不当,可能会引发短暂的服务发现问题。 下面我们从Eureka的核心工作原理来详细分析这个问题。 Eureka的…...
JavaScript基础-API 和 Web API
在学习JavaScript的过程中,理解API(应用程序接口)和Web API的概念及其应用是非常重要的。这些工具极大地扩展了JavaScript的功能,使得开发者能够创建出功能丰富、交互性强的Web应用程序。本文将深入探讨JavaScript中的API与Web AP…...
学习一下用鸿蒙DevEco Studio HarmonyOS5实现百度地图
在鸿蒙(HarmonyOS5)中集成百度地图,可以通过以下步骤和技术方案实现。结合鸿蒙的分布式能力和百度地图的API,可以构建跨设备的定位、导航和地图展示功能。 1. 鸿蒙环境准备 开发工具:下载安装 De…...
Python 训练营打卡 Day 47
注意力热力图可视化 在day 46代码的基础上,对比不同卷积层热力图可视化的结果 import torch import torch.nn as nn import torch.optim as optim from torchvision import datasets, transforms from torch.utils.data import DataLoader import matplotlib.pypl…...
Spring Security 认证流程——补充
一、认证流程概述 Spring Security 的认证流程基于 过滤器链(Filter Chain),核心组件包括 UsernamePasswordAuthenticationFilter、AuthenticationManager、UserDetailsService 等。整个流程可分为以下步骤: 用户提交登录请求拦…...
