SpringCloud Alibaba【二】nacos
nacos配置与使用
- nacos初步使用
- nacos安装与配置
- 创建命名空间
- nacos使用与配置
- 创建新项目作为父项目
- 创建nacos服务端项目
- pom.xml
- application.yml
- 启动类
- 创建nacos客户端项目
- pom.xml
- application.yml
- 启动类
- 启动测试
- nacos配置负载均衡
- 改造生产者nacos-provider-project
- controller层
- 改造消费者nacos-consumer-project
- 配置负载均衡
- controller
- 测试
- nacos配置中心
- 创建命名空间
- 修改生产者nacos-provider-project
- 增加一个配置文件bootstrap.properties
- 在controller层增加注解@RefreshScope
- 测试
nacos初步使用
Nacos 是阿里巴巴推出来的一个新开源项目,这是一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。
简单来说,nacos可以用来管理一个springcloud项目中各个模块与组件。安装运行nacos后可以在专门的页面上看到注册进nacos的各个模块的信息。
以上是个人理解,如有不对,可在评论区纠正。
nacos安装与配置
GitHub下载地址


在此目录下进入cmd
输入命令:startup.cmd -m standalone

访问控制台中的地址,用户名密码都是nacos



如果这里访问页面的IP地址与本机地址不同,说明nacos使用了虚拟网卡。如果想要ip地址为本机ip,需要在网络适配器中禁用虚拟卡

创建命名空间

创建成功后系统会生成一个唯一的id,这个id写在生产者与消费者的yml文件中(下文已写出)。这样nacos会将项目中的服务注册到指定的命名空间中,避免多个项目混淆。
nacos使用与配置
创建新项目作为父项目
创建新项目后,删除src文件夹,只保留pom.xml

pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.hzx</groupId><artifactId>testmaven32springcloud</artifactId><version>1.0-SNAPSHOT</version><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.3.2.RELEASE</version></parent><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId></dependency><!--spring cloud alibaba 2.2.6.RELEASE--><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-alibaba-dependencies</artifactId><version>2.2.6.RELEASE</version><type>pom</type><scope>import</scope></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build>
</project>
我的springboot版本是2.3.2,对应的springcloud-alibaba版本是2.2.6。需要注意springboot和springcloud alibaba版本要相对应。
创建nacos服务端项目
名字是:nacos-provider-project

pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><parent><artifactId>testmaven32springcloud</artifactId><groupId>com.hzx</groupId><version>1.0-SNAPSHOT</version></parent><modelVersion>4.0.0</modelVersion><artifactId>nacos-provider-project</artifactId><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId><version>2.3.2.RELEASE</version></dependency><!--discovery依赖是用来注册到nacos客户端的--><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId><version>2.2.7.RELEASE</version></dependency><!--config依赖是用来完成配置中心功能--><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId><version>2.2.7.RELEASE</version></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><configuration><excludes><exclude><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></exclude></excludes></configuration></plugin></plugins></build></project>
application.yml
server:port: 8081
spring:cloud:nacos:discovery:server-addr: http://192.168.220.1:8848namespace: 8302a253-b30a-4a13-bdeb-0caf566317b9application:name: nacos-provider
启动类
@SpringBootApplication
@EnableDiscoveryClient
public class StartNacosProvider{public static void main(String[] args) throws Exception {SpringApplication.run(StartNacosProvider.class, args);}
}
创建nacos客户端项目
名字是:nacos-consumer-project
pom.xml
与服务端的pom.xml依赖一致
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><parent><artifactId>testmaven32springcloud</artifactId><groupId>com.hzx</groupId><version>1.0-SNAPSHOT</version></parent><modelVersion>4.0.0</modelVersion><artifactId>nacos-consumer-project</artifactId><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId><version>2.3.2.RELEASE</version></dependency><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId><version>2.2.7.RELEASE</version></dependency><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId><version>2.2.7.RELEASE</version></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><configuration><excludes><exclude><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></exclude></excludes></configuration></plugin></plugins></build>
</project>
application.yml
server:port: 8091
spring:cloud:nacos:discovery:server-addr: http://192.168.220.1:8848namespace: 8302a253-b30a-4a13-bdeb-0caf566317b9application:name: nacos-consumer
启动类
@SpringBootApplication
@EnableDiscoveryClient
public class StartNacosConsumer {public static void main(String[] args) throws Exception {SpringApplication.run(StartNacosConsumer.class, args);}
}
启动测试
先启动服务端再启动客户端


在nacos网站可以看到服务已经注册进nacos中

nacos配置负载均衡
改造生产者nacos-provider-project
controller层
@RestController
public class ProviderController {@Value("${server.port}")private String port;@RequestMapping(value = "/nacos/provider/get/{id}",method = RequestMethod.GET)public String getNacosProvider(@PathVariable Integer id){return "使用provider中的方法,端口号:"+port+",传来参数:"+id;}
}
改造消费者nacos-consumer-project
配置负载均衡
@Configuration
public class ConsumerConfig {@Bean@LoadBalancedpublic RestTemplate getRestTemplate(){return new RestTemplate();}
}
controller
@RestController
public class ConsumerController {@Autowiredprivate RestTemplate restTemplate;@RequestMapping(value = "/nacos/consumer/get/{id}",method = RequestMethod.GET)public String getNacosConsumer(@PathVariable Integer id){return restTemplate.getForObject("http://nacos-provider/nacos/provider/get/"+id,String.class);}
}
测试
现在启动两个生产者,先启动一个生产者然后修改一下端口号再启动一个生产者


现在有两个 生产者,端口号分别为8081和8082。
启动消费者消费者端口号为8091
现在通过apifox调用消费者的接口


根据返回值可以看到,消费者分别调用了两个生产者的接口,达成负载均衡的效果。
可以在nacos网站未各个生产者分配权重。权重越高被访问的频率越高,权重设置为0则实例完全不会被访问。


使用负载均衡,可以合理利用资源,服务器性能有差异,当实例部署在性能不同的机器上时,可以通过设置权重,让性能好的机器承担更多的用户请求;另外,在升级服务时,通过调整权重进行平滑升级,例如,把实例1权重调节为0,用户只能去调用实例2、实例3的情况,待实例1升级后,也可以将实例1的权重设置为0.1,让一部分用户先体验,实例1稳定后再调高权重。
nacos配置中心
SpringCLoud Alibaba的Nacos相对于SpringCloud而言,实现了Eureka和Config和Ribbon的作用,上面已经介绍了nacos对应eureka可ribbon的内容,下面介绍config的内容。
nacos的配置中心中,所有服务使用nacos上面的配置,不走本地配置。
创建命名空间
现在nacos网站上创建一个新的命名空间


修改生产者nacos-provider-project
增加一个配置文件bootstrap.properties
配置文件是先加载bootstrap再加载application,所有读取nacos的配置写在bootstrap配置里。
spring.application.name=nacos-provide-config-center
spring.cloud.nacos.config.server-addr=http://192.168.220.1:8848
spring.cloud.nacos.config.file-extension=yaml
spring.cloud.nacos.config.namespace=8302a253-b30a-4a13-bdeb-0caf566317b9
spring.profiles.active=dev
spring.cloud.nacos.config.refresh-enabled=true
在nacos网站里同样需要配置

bootstrap.properties文件中输入的内容与在网页里配置的内容相一致
application.name会对应nacos上面配置文件的dataid值server-addr是nacos的地址file-extension是对应nacos上面配置文件的扩展名namespace是对应nacos上面配置文件所属的命名空间active是表示后缀使用哪个配置文件,例如nacos-provide-config-center-dev.yaml,nacos-provide-config-center-test.yamlrefresh-enabled是开启配置文件自动刷新(修改nacos的配置文件后默认不会自动刷新,除非重启服务。注意:需要结合@RefreshScope注解一起使用)

在controller层增加注解@RefreshScope

测试
启动生产者与消费者后,可以在nacos网站的配置中看到,端口号与本地不同。
相关文章:
SpringCloud Alibaba【二】nacos
nacos配置与使用 nacos初步使用nacos安装与配置创建命名空间 nacos使用与配置创建新项目作为父项目 创建nacos服务端项目pom.xmlapplication.yml启动类 创建nacos客户端项目pom.xml application.yml启动类 启动测试 nacos配置负载均衡改造生产者nacos-provider-projectcontroll…...
C++中的fsanitize指令
一个集成在 gcc、clang 编译器中的编译指令,可以有效测试程序中的一些诸如数组越界、未定义行为等情况。 举个例子: #include <bits/stdc.h> using namespace std;const int maxn2e55,mxr1e5,maxm1e75; int head[maxn],nxt[maxn],to[maxn],f[max…...
【AI视野·今日Robot 机器人论文速览 第五十八期】Thu, 19 Oct 2023
AI视野今日CS.Robotics 机器人学论文速览 Thu, 19 Oct 2023 Totally 25 papers 👉上期速览✈更多精彩请移步主页 Daily Robotics Papers InViG: Benchmarking Interactive Visual Grounding with 500K Human-Robot Interactions Authors Hanbo Zhang, Jie Xu, Yuch…...
Java截取(提取)子字符串(substring()),Java分割字符串(split())
在 String 中提供了两个截取字符串的方法,一个是从指定位置截取到字符串结尾,另一个是截取指定范围的内容。下面对这两种方法分别进行介绍。 1. substring(int beginIndex) 形式 此方式用于提取从索引位置开始至结尾处的字符串部分。调用时,…...
从厨房间到股市:家庭主妇的华美转身
我一直是一个安于现状的家庭主妇。生活中,我热爱烹饪、园艺和照顾家人,但我也渴望能有更多的自我实现和价值感。在机缘巧合下,我接触到了卓扬网,一个专业的股票投资平台。从那刻起,我的人生发生了翻天覆地的变化。 初…...
Oracle 数据库的锁排查方法
关键字 oracle lock 问题描述 Oracle 数据库上锁问题如何排查 解决问题思路 准备数据 create table lock_test(name varchar(10),age varchar(10));insert into lock_test values(ff,10); insert into lock_test values(yy,20); insert into lock_test values(ll,30);Orac…...
混合精度训练原理之float16和float32数据之间的互相转换
混合精度训练原理之float16和float32数据之间的互相转换 本篇文章参考:全网最全-混合精度训练原理 上述文章已经讲解的比较详细,本文只是从数值角度分析: 1. float32转入float16的精度误差 2. 在深度学习的混精度训练当中,当参数…...
网络协议--ICMP:Internet控制报文协议
6.1 引言 ICMP经常被认为是IP层的一个组成部分。它传递差错报文以及其他需要注意的信息。ICMP报文通常被IP层或更高层协议(TCP或UDP)使用。一些ICMP报文把差错报文返回给用户进程。 ICMP报文是在IP数据报内部被传输的,如图6-1所示。 ICMP…...
《红蓝攻防对抗实战》三.内网探测协议出网之HTTP/HTTPS协议探测出网
目录 一. 在 Windows 操作系统中探测 HTTP/HTTPS 出网 1. Bitsadmin 命令 2.Certuil 命令 2.Linux系统探测HTTP/HTTPS出网 1.Curl命令 2.Wget命令 对目标服务器探测 HTTP/HTTPS 是否出网时,要根据目标系统类型执行命令,不同类型的操作系统使用的探…...
【Win11】系统重装教程(最新最详细)
目录 一.简介 二.用U盘制作PE系统 三、安装系统 软件:Windows 11版本:21H2语言:简体中文大小:5.14G安装环境:PE系统,至少7代处理器硬件要求:CPU2.0GHz 内存4G(或更高)下载通道①丨…...
如何构建一个外卖微信小程序
随着外卖行业的不断发展,越来越多的商家开始关注外卖微信小程序的开发。微信小程序具有使用方便、快速上线、用户覆盖广等优势,成为了商家们的首选。 那么,如何快速开发一个外卖微信小程序呢?下面就让我们来看看吧! 首…...
小知识(5) el-table行样式失效问题
一、实现效果 子级呈现不同颜色去区分 二、最初代码 tips: 我这里使用的vue3 elementplus <el-table :row-class-name"tableRowClassName" >... </el-table>function tableRowClassName({ row, rowIndex }) {if (row.children.length 0) {return …...
【Docker】Docker数据的存储
默认情况下,在运行中的容器里创建的文件,被保存在一个可写的容器层里,如果容器被删除了,则对应的数据也随之删除了。 这个可写的容器层是和特定的容器绑定的,也就是这些数据无法方便的和其它容器共享。 Docker主要提…...
hive字段关键字问题处理
最近在xxl_job部署shell调度任务时,发现在编写Hql时,对一些使用关键字命名的字段无法解析,按开发规范,字段命名不应该有关键字,但是数据来源是第三方,无法修改,需要通过flume对从kafka的数据到hdfs上,数据是json格式,所以需要对关…...
指定顺序输出
系列文章目录 进阶的卡莎C++_睡觉觉觉得的博客-CSDN博客数1的个数_睡觉觉觉得的博客-CSDN博客双精度浮点数的输入输出_睡觉觉觉得的博客-CSDN博客足球联赛积分_睡觉觉觉得的博客-CSDN博客大减价(一级)_睡觉觉觉得的博客-CSDN博客小写字母的判断_睡觉觉觉得的博客-CSDN博客纸币(…...
(Java)中的数据类型和变量
文章目录 一、字面常量二、数据类型三、变量1.变量的概念2.语法的格式3.整型变量4.长整型变量5.短整型变量6.字节型变量 四、浮点型变量1.双精度浮点数2.单精度浮点数 五、字符型常量六、布尔型变量七、类型转换1.自动类型转换(隐式)2.强制类型转换(显式…...
SHELL脚本编程基础,bilibili王晓春老师课程个人笔记(写比较简单,仅供参考)
文章目录 一、第一天(Shell脚本编程基础)作者视频ppt部分作者视频操作编写一个hello.sh可执行文件使hello.sh可以到处运行没有执行权限的执行方式下载httpd(web服务器)curl字符界面浏览器 命令列表凌乱笔记 作业重点: …...
VS code运行vue项目
要在VS Code中启动Vue项目,您可以按照以下步骤进行操作: 1.打开VS Code,并确保已安装Vue.js插件(如Vetur)。 2.在VS Code的侧边栏中,选择您的Vue项目文件夹,或者使用菜单中的“文件”->“打…...
matlab中narginchk函数用法及其举例
matlab中narginchk函数用法及其举例 narginchk在编写子函数程序时候,在验证输入参数数目方面具有重要作用,本博文讲一讲该函数的用法。 一、narginchk功能 narginchk的作用是验证输入参数数目。 二、语法 narginchk(minArgs,maxArgs)narginchk(minA…...
k8s集群镜像下载加gradana监控加elk日志收集加devops加秒杀项目
展示 1.配套资料2.devops 3.elk日志收集 4.grafana监控 5.dashboard,响应速度远超传统服务器类似apache支持高并发连接 2.反向代理服务器 隐藏后端服务器IP地址,提高安全性 3.负载均衡服务器 支持多种策略分发流量…...
Docker 运行 Kafka 带 SASL 认证教程
Docker 运行 Kafka 带 SASL 认证教程 Docker 运行 Kafka 带 SASL 认证教程一、说明二、环境准备三、编写 Docker Compose 和 jaas文件docker-compose.yml代码说明:server_jaas.conf 四、启动服务五、验证服务六、连接kafka服务七、总结 Docker 运行 Kafka 带 SASL 认…...
【磁盘】每天掌握一个Linux命令 - iostat
目录 【磁盘】每天掌握一个Linux命令 - iostat工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景 注意事项 【磁盘】每天掌握一个Linux命令 - iostat 工具概述 iostat(I/O Statistics)是Linux系统下用于监视系统输入输出设备和CPU使…...
c++ 面试题(1)-----深度优先搜索(DFS)实现
操作系统:ubuntu22.04 IDE:Visual Studio Code 编程语言:C11 题目描述 地上有一个 m 行 n 列的方格,从坐标 [0,0] 起始。一个机器人可以从某一格移动到上下左右四个格子,但不能进入行坐标和列坐标的数位之和大于 k 的格子。 例…...
spring:实例工厂方法获取bean
spring处理使用静态工厂方法获取bean实例,也可以通过实例工厂方法获取bean实例。 实例工厂方法步骤如下: 定义实例工厂类(Java代码),定义实例工厂(xml),定义调用实例工厂ÿ…...
CMake 从 GitHub 下载第三方库并使用
有时我们希望直接使用 GitHub 上的开源库,而不想手动下载、编译和安装。 可以利用 CMake 提供的 FetchContent 模块来实现自动下载、构建和链接第三方库。 FetchContent 命令官方文档✅ 示例代码 我们将以 fmt 这个流行的格式化库为例,演示如何: 使用 FetchContent 从 GitH…...
3403. 从盒子中找出字典序最大的字符串 I
3403. 从盒子中找出字典序最大的字符串 I 题目链接:3403. 从盒子中找出字典序最大的字符串 I 代码如下: class Solution { public:string answerString(string word, int numFriends) {if (numFriends 1) {return word;}string res;for (int i 0;i &…...
AI,如何重构理解、匹配与决策?
AI 时代,我们如何理解消费? 作者|王彬 封面|Unplash 人们通过信息理解世界。 曾几何时,PC 与移动互联网重塑了人们的购物路径:信息变得唾手可得,商品决策变得高度依赖内容。 但 AI 时代的来…...
LeetCode - 199. 二叉树的右视图
题目 199. 二叉树的右视图 - 力扣(LeetCode) 思路 右视图是指从树的右侧看,对于每一层,只能看到该层最右边的节点。实现思路是: 使用深度优先搜索(DFS)按照"根-右-左"的顺序遍历树记录每个节点的深度对于…...
代码随想录刷题day30
1、零钱兑换II 给你一个整数数组 coins 表示不同面额的硬币,另给一个整数 amount 表示总金额。 请你计算并返回可以凑成总金额的硬币组合数。如果任何硬币组合都无法凑出总金额,返回 0 。 假设每一种面额的硬币有无限个。 题目数据保证结果符合 32 位带…...
