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.dashboard2.协议名(Protocol Name)3.方法名(Method Name)4.属性名(Property Name)5.局部变量/实例变量(Local / Instance Variables&…...
基于Java Swing的电子通讯录设计与实现:附系统托盘功能代码详解
JAVASQL电子通讯录带系统托盘 一、系统概述 本电子通讯录系统采用Java Swing开发桌面应用,结合SQLite数据库实现联系人管理功能,并集成系统托盘功能提升用户体验。系统支持联系人的增删改查、分组管理、搜索过滤等功能,同时可以最小化到系统…...
Java毕业设计:WML信息查询与后端信息发布系统开发
JAVAWML信息查询与后端信息发布系统实现 一、系统概述 本系统基于Java和WML(无线标记语言)技术开发,实现了移动设备上的信息查询与后端信息发布功能。系统采用B/S架构,服务器端使用Java Servlet处理请求,数据库采用MySQL存储信息࿰…...
【电力电子】基于STM32F103C8T6单片机双极性SPWM逆变(硬件篇)
本项目是基于 STM32F103C8T6 微控制器的 SPWM(正弦脉宽调制)电源模块,能够生成可调频率和幅值的正弦波交流电源输出。该项目适用于逆变器、UPS电源、变频器等应用场景。 供电电源 输入电压采集 上图为本设计的电源电路,图中 D1 为二极管, 其目的是防止正负极电源反接, …...
JavaScript 数据类型详解
JavaScript 数据类型详解 JavaScript 数据类型分为 原始类型(Primitive) 和 对象类型(Object) 两大类,共 8 种(ES11): 一、原始类型(7种) 1. undefined 定…...
libfmt: 现代C++的格式化工具库介绍与酷炫功能
libfmt: 现代C的格式化工具库介绍与酷炫功能 libfmt 是一个开源的C格式化库,提供了高效、安全的文本格式化功能,是C20中引入的std::format的基础实现。它比传统的printf和iostream更安全、更灵活、性能更好。 基本介绍 主要特点 类型安全:…...
前端中slice和splic的区别
1. slice slice 用于从数组中提取一部分元素,返回一个新的数组。 特点: 不修改原数组:slice 不会改变原数组,而是返回一个新的数组。提取数组的部分:slice 会根据指定的开始索引和结束索引提取数组的一部分。不包含…...
小木的算法日记-多叉树的递归/层序遍历
🌲 从二叉树到森林:一文彻底搞懂多叉树遍历的艺术 🚀 引言 你好,未来的算法大神! 在数据结构的世界里,“树”无疑是最核心、最迷人的概念之一。我们中的大多数人都是从 二叉树 开始入门的,它…...
