SpringCloud 学习笔记2(Nacos)
Nacos
Nacos 下载
Nacos Server 下载 | Nacos 官网
下载、解压、打开文件:

更改 Nacos 的启动方式
Nacos 的启动模式默认是集群模式。在学习时需要把他改为单机模式。
把 cluster 改为 standalone,记得保存!
启动startup.cmd
Ubuntu 启动命令:bash startup.sh -m standalone

启动成功后进入 http://127.0.0.1:8848/nacos/
Nacos 使用
引入依赖
在父项目引入:
<properties><spring-cloud-alibaba.version>2022.0.0.0-RC2</spring-cloud-alibaba.version>
</properties><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>
<scope>import</scope> 表示这个依赖直接注入到父项目中。
子项目中引入:
<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-loadbalancer</artifactId></dependency>
修改配置
子项目的 yml 文件:
spring:application:name: order-servicecloud:nacos:discovery:# Nacos 的服务器地址server-addr: 101.201.246.67:8848
更改代码
更改之前在项目中写死的 url。
// 更改之前写死的 url// String url = "http://127.0.0.1:9090/product/" + orderInfo.getProductId();String url = "http://product-service/product/" + orderInfo.getProductId();
加上 @LoadBalanced 注解
@Configuration
public class BeanConfig {@Bean@LoadBalancedpublic RestTemplate restTemplate() {return new RestTemplate();}
}
启动服务,打开 Nacos 页面。
服务下线
选择要进行管理的服务,点击详情

选择要进行下线的服务器,点击下线。


权重配置
选择要进行管理的服务,点击详情

选择要进行管理的服务器,点击编辑。

进行权重设置。

如果权重没有生效,可以查看:如何解决MSE Nacos上修改服务实例的权重不生效问题_微服务引擎(MSE)-阿里云帮助中心
因为我在项目中使用了 Loadbalance 所以设置的权重并没有生效。
要想让权重生效,需要在消费者应用的配置文件中添加:
# 开启 Nacos 的负载均衡策略
spring:cloud:loadbalancer:nacos:enabled: true
需要注意的是,服务配置权重是非严格的。
什么叫非严格呢?
举个例子:服务 A 占权重的 50%,服务 B 占权重的 50%,如果来了两个请求,不一定是 A 处理一个请求,B处理一个请求。 如果来了 2 千万次的请求,A、B 处理的请求数接近 1 千万,而不是严格的等于 1 千万。
同集群优先访问
修改配置文件:
spring:cloud:nacos:discovery:# 修改集群名称cluster-name: BJ
效果:

修改同一个服务,不同端口号的配置:
复制配置(右键你要修改的配置,按下图顺序点击)
选择要修改的服务,点击 Edit
修改配置,如果要修改多个配置,中间使用空格分隔。
生产者服务有3个,分别是 9090、9091 和 9092,9090 在集群 BJ 中,而9091 和 9092 在 集群 SH 中 。
消费者服务有一个,它在集群 BJ 中。

此时,多次调用消费者服务,发现消费者服务会优先访问同集群下的生产者服务,也就是 9090。



这就是同集群优先访问。
如果同集群下的生产者服务都挂掉了,那么本集群下的消费者服务就会转而访问不同集群下的生产者服务。
比如说,上述的 9090 挂掉了,那么 8080 就会开始访问 9091 和 9092 。
Nacos 健康检查
Nacos 提供了两种健康检查机制。
- 客户端主动上报机制。
- 客户端通过心跳上报方式告知服务器健康状态,默认的心跳间隔为 5 秒。
- Nacos 会在超过 15 秒未收到心跳后将实例设置为不健康状态,超过 30 秒就会将实例删除。
- 服务器端反向探测机制。
- Nacos 主动探知客户端健康状态,默认间隔为 20 秒。
- 健康检查失败后实例会标记为不健康,不会被立即删除。

Nacos 服务实例类型介绍
Nacos 的服务实例类型分为临时实例和非临时实例。
- 临时实例(默认类型):实例处于不健康状态超过一定时长,会被从服务列表删除。临时实例采用的是客户端主动上报机制。
- 非临时实例(也叫做永久实例):实例哪怕一直处于不健康状态,也不会被删除。非临时实例采用的是服务器反向探测机制。
非临时实例设置方法:
在配置文件中添加
spring:cloud:nacos:discovery:# false 表示修改为非临时实例ephemeral: false
由于 Nacos 会记录每一个实例的 IP,端口号以及实例类型,Nacos 不允许将临时实例修改为非临时实例,非临时实例也不能修改为临时实例。如果想修改,则需要停止 Nacos 并删除 Nacos 中的 raft 文件夹。
raft 文件夹在
nacos/data/protocol/目录下。
删除后重启 Nacos,即可修改成功。
环境隔离
创建命名空间

起名字

将实例放在指定环境
查看命名空间 ID

修改 yml 配置
spring:cloud:nacos:discovery:# 设置服务管理的命名空间,后面跟命名空间的 IDnamespace: 031fd6a5-8ead-4999-bdeb-4733fb730182
不在同一命名空间下的服务不能互相访问,这就是 Nacos 的环境隔离。
Nacos 配置中心
配置中心的流程
- 服务启动时,从配置中心读取配置内容,进行初始化。
- 配置修改时,通知微服务,实现配置的更新功能。
Nacos 配置中心使用
添加配置



Data ID 介绍
当三个配置同时存在,且各不相同时,它们的优先级为:
1. ${prefix}-${spring.profiles.active}.${file-extension} 2. ${prefix}.${file-extension} 3. ${prefix}例如有如下三个配置:
![]()
它们的优先级为:
在生产者服务中引入依赖
<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId></dependency><!-- SpringCloud 2020.*之后版本需要引⼊bootstrap--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-bootstrap</artifactId></dependency>
修改配置文件
在生产者服务中创建 bootstrap.yml 或者 bootstrap.properties 文件。
在 bootstrap.yml 或者 bootstrap.properties 中添加以下配置。
spring:application:name: product-servicecloud:nacos:config:# Nacos 的服务器地址(从哪里获取配置信息)server-addr: 101.201.246.67:8848
从 nacos 读取配置文件
// @RefreshScope 这个注解的作用是当 nacos 中的配置发生更改,服务实例也同步更改配置。也就是配置热更新。
@RefreshScope
@RestController
public class NacosController {@Value("${nacos.config}")private String nacosConfig;@RequestMapping("getConfig")public String getConfig() {return "从 Nacos 中获取配置项 nacos.config:" + nacosConfig;}
}

Nacos 配置管理的命名空间和服务器列表的命名空间是分别设置的,默认是public。
Nacos 命名空间配置依然在 bootstrap.properties 中进行设置。
程序会先读取 bootstrap 中的配置,然后再读取 application 中的配置。
设置命名空间:
-
复制命名空间 ID

-
修改 bootstrap.properties 或 bootstrap.yml 文件
spring:cloud:nacos:config:namespace: 031fd6a5-8ead-4999-bdeb-4733fb730182 #配置中心的命名空间 ID
重启服务、访问接口,可以看到修改成功了!

部署到服务器
参考 博客系统笔记总结 2( Linux 相关) 中的部署 Web 项目到 Linux
有一点不同的是,由于程序会先读取 bootstrap 中的配置,然后再读取 application 中的配置。
为了方便管理,我们可以把 application.yml 删除,此时目录结构就变成了这样:

然后在 bootstrap 中添加:
spring:profiles:active: @profile.name@
但是因为 bootstrap 并不能识别 @ 符号,所以我们还需要在 pom 中添加:
<build><resources><resource><directory>src/main/resources</directory><filtering>true</filtering><includes><include>**/**</include></includes></resource></resources></build>
本文到这里就结束啦~

相关文章:
SpringCloud 学习笔记2(Nacos)
Nacos Nacos 下载 Nacos Server 下载 | Nacos 官网 下载、解压、打开文件: 更改 Nacos 的启动方式 Nacos 的启动模式默认是集群模式。在学习时需要把他改为单机模式。 把 cluster 改为 standalone,记得保存! 启动startup.cmd Ubuntu 启动…...
Blender-MCP服务源码4-初始化项目解读
Blender-MCP服务源码4-初始化项目解读 上篇文章针对Blender开发框架完成了一个基础模板的搭建,并在Blender中成功进行了运行,那这个初始化项目中是如何进行页面效果呈现的,尝试手动进行功能精简来拆解项目代码 1-核心知识点 1)如…...
基于eNSP的IPV4和IPV6企业网络规划
基于eNSP的IPV4和IPV6企业网络规划 前言网络拓扑设计功能设计技术详解一、网络设备基础配置二、虚拟局域网(VLAN)与广播域划分三、冗余协议与链路故障检测四、IP地址自动分配与DHCP相关配置五、动态路由与安全认证六、广域网互联及VPN实现七、网络地址转…...
Vue3项目中可以尝试封装那些组件
在 Vue 3 项目中,组件的封装可以根据功能、复用性和业务需求进行划分。以下是一些常见的组件类型,适合封装为独立组件: 1. 基础 UI 组件 按钮 (Button) 封装不同样式、大小、状态的按钮。支持 disabled、loading 等状态。 输入框 (Input) 封…...
Web Component 教程(二):如何有效管理和使用自定义属性
前言 在现代前端开发中,Web Component 是一个强大的工具,可以帮助我们创建可重用的组件。Web Component 的一个重要特性是能够处理自定义属性,这使得我们能够灵活地控制组件的行为和外观。今天,我会通过一个通俗易懂的教程&#…...
C#特性和反射
1。特性概念理解? 特性(Attribute)是用于在【运行时】传递程序中各种元素(比如类、属性、方法、结构、枚举、组件等)行为信息的声明性标签。您可以通过使用特性向程序添加声明性信息。一个声明性标签是通过放置在它所…...
蓝桥杯刷题周计划(第三周)
目录 前言题目一题目代码题解分析 题目二题目代码题解分析 题目三题目代码题解分析 题目四题目代码题解分析 题目五题目代码题解分析 题目六题目代码题解分析 题目七题目代码题解分析 题目八题目代码题解分析 题目九题目代码题解分析 题目十题目代码题解分析 前言 大家好&#…...
mysql5.x和mysql8.x查看和设置隔离级别
MySQL的隔离级别 级别标志值描述读未提交READ-UNCOMMITTED0存在脏读、不可重复读、幻读的问题读已提交READ-COMMITTED1解决脏读的问题,存在不可重复读、幻读的问题可重复读REPEATABLE-READ2mysql 默认级别,解决脏读、不可重复读的问题,存在幻…...
3.17学习总结
写了两道题 刚开始用的之前做组合输出的方法,时间超限了,想不出怎么优化,后面看了题解,代码如下 #include <stdio.h> #include <stdlib.h> int n,min2e9; int a[11],b[11]; //搜索 void hly(int s,int x,int y) {//当…...
Blender材质 - 层权重
层权重 混合着色器 可以让 面朝向的一面显示一种材质 另一面显示另一种材质 就能实现挺不错的材质效果 移动视角 材质会跟着变化 有点类似虚幻的视差节点BumpOffset...
【JavaEE】Spring Boot 日志
目录 一、日志概述二、使用日志2.1 打印日志2.2 日志框架2.2.1 门面 / 外观 模式 2.3 日志级别2.3.1 六大分类2.3.2 使用 2.4 日志级别配置2.5 日志的持久化2.6 日志文件分割2.7 日志文件格式2.8 Slf4j 简单打印日志 一、日志概述 ⽇志主要是为了发现问题, 分析问题, 定位问题…...
Qt中的 #include “xxxx.moc“ 说明
Qt中的 #include “xxxx.moc” 说明 在Qt开发中,有时会看到在cpp文件末尾包含 #include "xxxx.moc" 这样的代码。这种做法主要用于以下情况: 使用场景 当你在非头文件中定义了一个包含Q_OBJECT宏的类时,需要包含对应的.moc文件。…...
如何用solidworks画齿轮
齿轮还是很有技术含量的,专业名词太多看不懂, 只会画 (这个东西不能自己想当然画, 齿轮之间不啮合是很有问题的,会积累磨损) 步骤1 打开设计库里的toolbox 选择正齿轮,右键生成零件 需要改的有几个关键的地方,我是只知道内圆外圆所以,对我来说最重要的是标称轴直径 (即正中间…...
详解布隆过滤器及其模拟实现
目录 布隆过滤器 引入 概念 工作原理 模拟实现布隆过滤器 哈希函数集 布隆过滤器基本框架 add函数(添加到布隆过滤器中) contains函数(判断是否存在该值) 完整代码 布隆过滤器的删除 布隆过滤器的误判率 布隆过滤器的…...
element-plus中DatePicker 日期选择器组件的使用
1.选择某一天 代码: <el-date-pickerv-model"invoice_date"type"date"placeholder"请选择日期"style"width: 200px;"clearable /> 运行效果: 问题所在:这个数据的格式不是我们后端需要的那种&…...
SvelteKit 最新中文文档教程(4)—— 表单 actions
前言 Svelte,一个语法简洁、入门容易,面向未来的前端框架。 从 Svelte 诞生之初,就备受开发者的喜爱,根据统计,从 2019 年到 2024 年,连续 6 年一直是开发者最感兴趣的前端框架 No.1: Svelte …...
力扣hot100二刷——二叉树
第二次刷题不在idea写代码,而是直接在leetcode网站上写,“逼”自己掌握常用的函数。 标志掌握程度解释办法⭐Fully 完全掌握看到题目就有思路,编程也很流利⭐⭐Basically 基本掌握需要稍作思考,或者看到提示方法后能解答⭐⭐⭐Sl…...
企业安全——数据泄露防护
0x00 前言 本篇对数据泄露防护方面的内容进行汇总和总结,为抛砖引玉的内容 0x01 数据隔离 数据隔离是防止数据泄露的一个非常好的方式,通常的隔离方式有 主机/服务器隔离网络隔离介质隔离 0x02 数据丢失预防 主要防止数据丢失的方法就是DLP&#x…...
字符串哈希从入门到精通
一、基本概念 字符串哈希是将任意长度的字符串映射为固定长度的哈希值(通常为整数)的技术,核心目标是实现O(1)时间的子串快速比较和高效查询。其本质是通过数学运算将字符串转换为唯一性较高的数值,例如: …...
C语言:编程设计猜数游戏
先由计算机想一个数给用户猜,如果猜对了,提示“right!”,猜错了,提示“wrong!及大小” 思路:用随机函数rand()取到计算机想的数 代码: #include <stdio.…...
地下车库智能停车位指引系统方案(还有缺陷)
一、系统核心技术架构 通过车牌识别+车位检测+室内定位+路径规划四大技术模块实现全自动指引: 二、关键技术方案 1. 车辆身份识别与入场触发 车牌识别(LPR)技术 入口处部署高清摄像头,自动识别车牌并关联车辆信息(如会员、临时车)。触发逻辑:识别成功后抬杆放行,同时…...
Docker 使用指南
Docker 是一种开源的容器化平台,它通过使用容器来进行应用程序的打包、分发和部署。下面是 Docker 的基本概念和优势: 容器化:Docker 使用容器来封装应用程序及其所有依赖项,使其能够在任何环境中运行,并且与底层系统隔…...
win10 c++ VsCode 配置PCL open3d并显示
win10 c VsCode配置PCL open3d并显示 一、效果图二、配置步骤2.1 安装vscode2.2 pcl-open3d配置2.3 vscode中设置 三、测试代码四、注意事项及后续 一、效果图 二、配置步骤 2.1 安装vscode vscode下载链接 下载中文插件、c相关插件 2.2 pcl-open3d配置 1)下载…...
Vala 开发环境搭建
介绍 Vala 是一种使用现代高级抽象的编程语言,与用 C 语言编写的应用程序和库相比,没有施加额外的运行时要求,也不需要使用不同的 ABI。 Vala 使用 GObject 类型系统,并具有额外的代码生成例程,使面向 GNOME 堆栈变得简…...
【网页】自制流光卡片
概述 小红书有个博主自己搞的笔记排版工具叫“流光卡片”,类似的还有个Markdown排版工具叫MD2Card。 我这个版本类似,但是自己写的东西,控制性更好。 初期就写了个静态页面,后期结合Godot快速生成,并可能结合JS库&a…...
【数据结构】栈与队列:基础 + 竞赛高频算法实操(含代码实现)
什么是栈?什么是队列? 什么是先进后出?什么是先进先出? 了解基础之后,又如何用来写算法题? 带着这些疑问,让我带领你,走进栈与队列的世界 栈与队列 栈: 1、栈的基本…...
CSP-J/S冲奖第18天:真题解析
解题步骤 读取输入:首先读取整数n,然后读取n个正整数并存储在一个数组或容器中。 排序数组:对数组进行排序,以便后续使用双指针法高效查找。 遍历数组:对于每个数target,检查是否存在另外两个不同的数a和…...
【linux】虚拟机执行sudo yum isntall perl报错 could not retrieve mirrorlist htt:
项目场景: 提示:虚拟机安装拓展包,sudo yum install perl Virtualbox 在不安装增强功能扩展的情况下, 无法自适应分辨率和共享剪切板等操作 问题描述 原因分析: 提示:这里填写问题的分析: 出现这个错误是因…...
旅游类小程序界面设计
产品概述 艾啦游是一款互联网旅游类小程序,致力于国内精品旅游,以及拥有自由行、专属热榜单、出行攻略等诸多功能,汇聚了许多国内的人气景点,与诸多城市的酒店也保持合作,打造一体式旅行服务,更有不断上新…...
DQN 玩 2048 实战|第三期!优化网络,使用GPU、Env奖励优化
视频讲解: DQN 玩 2048 实战|第三期!优化网络,使用GPU、Env奖励优化 1. 仅考虑局部合并奖励:目前的奖励只设置为合并方块时获得的分数,只关注了每一步的即时合并收益,而没有对最终达成 2048 这个…...





