Nacos
Nacos介绍
下载和解压

下载完了之后进⾏解压,解压之后的⽬录为:
启动
Linux/Unix/Mac
sh startup.sh -m standalone
如果您使⽤的是ubuntu系统,或者运⾏脚本报错提示[[符号找不到,可尝试如下运⾏:
bash startup.sh -m standalone
Windows
startup.cmd -m standalone
启动⽇志
默认的⽤户名和密码为:nacos/nacos

配置管理
spring . datasource . username = zhouyuspring . datasource . password = 123456
新建配置

拉取配置
Java SDK
<dependency>
<groupId>com.alibaba.nacos</groupId>
<artifactId>nacos-client</artifactId>
<version>2.1.1</version>
</dependency>
然后可以使⽤如下代码来获取nacos中的配置:
try {
String serverAddr = "localhost:8848";
String dataId = "user.properties";
String group = "DEFAULT_GROUP";
Properties properties = new Properties();
properties.put("serverAddr", serverAddr);
ConfigService configService = NacosFactory.createConfigService(propert
ies);
String content = configService.getConfig(dataId, group, 5000);
System.out.println(content);
} catch (NacosException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
String serverAddr = "localhost:8848";
String dataId = "user.properties";
String group = "DEFAULT_GROUP";
Properties properties = new Properties();
properties.put("serverAddr", serverAddr);
ConfigService configService = NacosFactory.createConfigService(propert
ies);
String content = configService.getConfig(dataId, group, 5000);
System.out.println(content);
configService.addListener(dataId, group, new Listener() {
public void receiveConfigInfo(String configInfo) {
System.out.println("recieve1:" + configInfo);
}
public Executor getExecutor() {
return null;
}
});
// 测试让主线程不退出,因为订阅配置是守护线程,主线程退出守护线程就会退出。 正式代
//码中⽆需下⾯代码
while (true) {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
} catch (NacosException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Spring
<dependency><groupId>com.alibaba.nacos</groupId><artifactId>nacos-spring-context</artifactId><version>1.1.1</version>
</dependency>
@Configuration
@EnableNacosConfig(globalProperties = @NacosProperties(serverAddr = "127.0.
0.1:8848"))
@NacosPropertySource(dataId = "user.properties", autoRefreshed = true)
@ComponentScan("com.zhouyu")
public class AppConfig {
}
@Component
public class UserService {@NacosValue("${spring.datasource.username}")private String username;public void test(){System.out.println(username);}
}
SpringBoot
<dependency><groupId>com.alibaba.boot</groupId><artifactId>nacos-config-spring-boot-starter</artifactId><version>0.2.12</version>
</dependency>
nacos.config.server-addr=127.0.0.1:8848
@SpringBootApplication
@NacosPropertySource(dataId = "user.properties", autoRefreshed = true)
public class UserApplication {public static void main(String[] args) {ConfigurableApplicationContext applicationContext = SpringApplicat
ion.run(UserApplication.class, args);UserService userService = applicationContext.getBean(UserService.c
lass);userService.test();}
}
nacos.config.server-addr =127.0.0.1:8848nacos.config.data-id =user.propertiesnacos.config.bootstrap.enable =true
不过要注意,⼀定得把nacos.config.bootstrap.enable设置为true,不然是不⾏的。
SpringCloud
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
<version>2.2.8.RELEASE</version>
</dependency>
spring.application.name =userspring.cloud.nacos.server-addr =127.0.0.1:8848
按profile拉取配置
// com.alibaba.cloud.nacos.client.NacosPropertySourceLocator#loadApplicati
onConfiguration
private void loadApplicationConfiguration(
CompositePropertySource compositePropertySource, String dataIdPrefix,
NacosConfigProperties properties, Environment environment) {
String fileExtension = properties.getFileExtension();
String nacosGroup = properties.getGroup();
// 1
// load directly once by default
loadNacosDataIfPresent(compositePropertySource, dataIdPrefix, nacosGro
up,fileExtension, true);
// 2
// load with suffix, which have a higher priority than the default
loadNacosDataIfPresent(compositePropertySource,dataIdPrefix + DOT + fileExtension, nacosGroup,
fileExtension, true);
// 3
// Loaded with profile, which have a higher priority than the suffix
for (String profile : environment.getActiveProfiles()) {
String dataId = dataIdPrefix + SEP1 + profile + DOT + fileExtensio
n;
loadNacosDataIfPresent(compositePropertySource, dataId, nacosGroup
,fileExtension, true);
}
}

拉取多个配置
1. spring.cloud.nacos.config.extension-configs[ 0 ]. data-id = datasource.properties2. spring.cloud.nacos.config.shared-configs[ 0 ]. data-id = common.properties
配置的⾃动刷新
历史版本回滚
监听查询
服务管理
Java SDK
服务注册
<dependency>
<groupId>com.alibaba.nacos</groupId>
<artifactId>nacos-client</artifactId>
<version>2.1.1</version>
</dependency>
NamingService naming = NamingFactory.createNamingService("localhost:8848");
naming.registerInstance("app1", "11.11.11.11", 8888);
System.in.read();

NamingService naming = NamingFactory.createNamingService("localhost:8848")
;
naming.registerInstance("app1", "11.11.11.11", 8888, "cluster1");
NamingService naming1 = NamingFactory.createNamingService("localhost:8848"
);
naming1.registerInstance("app1", "11.11.11.12", 8888, "cluster1");
NamingService naming2 = NamingFactory.createNamingService("localhost:8848"
);
naming2.registerInstance("app1", "11.11.11.13", 8888, "cluster2");
System.in.read();

详情如下:
我们也可以使⽤更加定制化的⽅式来注册服务:
NamingService naming = NamingFactory.createNamingService("localhost:8848")
;
Instance instance = new Instance();
instance.setIp("55.55.55.55");
instance.setPort(9999);
instance.setHealthy(false);
instance.setWeight(2.0);
Map<String, String> instanceMeta = new HashMap<String, String>();
instanceMeta.put("site", "et2");
instance.setMetadata(instanceMeta);
naming.registerInstance("app1", instance);
System.in.read();

服务发现
服务注册之后,服务消费者就可以来使⽤了,我们可以使⽤如下api来获取某个服务的所有实例信息
NamingService naming = NamingFactory.createNamingService("localhost:8848");
System.out.println(naming.getAllInstances("app1"));
naming.selectInstances("app1", true)
naming.selectOneHealthyInstance("app1")
NamingService naming = NamingFactory.createNamingService("localhost:8848");
naming.subscribe("app1", event -> {
if (event instanceof NamingEvent) {
System.out.println(((NamingEvent) event).getServiceName());
System.out.println(((NamingEvent) event).getInstances());
}
});
Spring/SpringBoot
SpringCloud
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
<version>2.2.8.RELEASE</version>
</dependency>
服务提供者
server.port=8070
spring.application.name=service-provider
spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
@SpringBootApplication
@EnableDiscoveryClient
public class UserApplication {
public static void main(String[] args) throws IOException {
SpringApplication.run(UserApplication.class, args);
}
}

服务消费者
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
<version>2.2.8.RELEASE</version>
</dependency>
server.port =8080spring.application.name =service-consumerspring.cloud.nacos.discovery.server-addr =127.0.0.1:8848
然后使⽤@EnableDiscoveryClient开启服务发现:
@SpringBootApplication
@EnableDiscoveryClient
public class ConsumerApplication {
public static void main(String[] args) {
SpringApplication.run(ConsumerApplication.class, args);
}
}
@LoadBalanced
@Bean
public RestTemplate restTemplate() {
return new RestTemplate();
}
@RestController
public class ConsumerController {@Autowiredprivate RestTemplate restTemplate;@GetMapping(value = "/test")public String echo() {return restTemplate.getForObject("http://service-provider/test", S
tring.class);}
}
⾼级功能
临时实例与持久实例
public static final long DEFAULT_HEART_BEAT_INTERVAL = TimeUnit.SECONDS.toM
illis(5);
public static final long DEFAULT_HEART_BEAT_TIMEOUT = TimeUnit.SECONDS.toMi
llis(15);
public static final long DEFAULT_IP_DELETE_TIMEOUT = TimeUnit.SECONDS.toMil
lis(30);
spring.cloud.nacos.discovery.ephemeral=false 1
保护阈值
权重

@Bean
public IRule ribbonRule() {
return new NacosRule();
}
Cluster(就近访问)
spring.cloud.nacos.discovery.cluster-name=bj

hz集群只有⼀个8070的实例,bj集群有8071、8072两个实例。
spring.cloud.nacos.discovery.cluster-name=bj
集群部署
192.168.65.46:8848
192.168.65.46:8858
192.168.65.46:8868

每个⽂件夹的内容都是如下
分别修改三个cluster⽂件的内容都为:
192.168.65.46:8848
192.168.65.46:8858
192.168.65.46:8868
startup.cmd -p embedded


不过我们我们在启动的时候,使⽤了
startup.cmd -p embedded

### If use MySQL as datasource:
spring.datasource.platform=mysql
### Count of DB:
db.num=1
### Connect URL of DB:
db.url.0=jdbc:mysql://127.0.0.1:3306/nacos2?characterEncoding=utf8&connect
Timeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=
false&serverTimezone=UTC
db.user.0=root
db.password.0=Zhouyu123456***
spring.cloud.nacos.discovery.server-addr=192.168.65.46:8848, 192.168.65.46:
8858, 192.168.65.46:8858
upstream nacos-cluster {
server 192.168.65.46:8848;server 192.168.65.46:8858;server 192.168.65.46:8868;
}
location /nacos {
proxy_pass http://nacos-cluster;
}
spring.cloud.nacos.discovery.server-addr=localhost:80/nacos
相关文章:

Nacos
Nacos介绍 Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service的⾸字⺟简称,⼀个更易于构 建云原⽣应⽤的动态服务发现、配置管理和服务管理平台。 在这个介绍中,可以看出Nacos⾄少有三个核⼼功能: 1. 动态服务发现 2. 配…...

【Linux】网络层协议:IP
我们必须接受批评,因为它可以帮助我们走出自恋的幻象,不至于长久在道德和智识上自我陶醉,在自恋中走向毁灭,事实上我们远比自己想象的更伪善和幽暗。 文章目录 一、IP和TCP之间的关系(提供策略 和 提供能力)…...

神经网络为什么可以学习
本资料转载于B站up主:大模型成长之路,仅用于学习和讨论,如有侵权请联系 动画解析神经网络为什么可以学习_哔哩哔哩_bilibilis 1、一个神经网络是由很多神经元形成的 1.1 也可以是一层,也可以是多层 2 层和层之间的连接就跟一张网一样 2.1 每…...

Docker基础入门:镜像、容器导入导出与私有仓库搭建
Docker基础入门:镜像导入导出与私有仓库搭建 一、 Docker镜像、容器的导入和导出1.1、Docker镜像的导出1.2、Docker镜像的载入1.3、Docker容器的导出1.4、Docker容器的导入 二、 镜像和容器导出和导入的区别:三、commit操作_本地镜像发布到阿里云3.1、commit操作有关…...

Go语言入门指南:基础语法和常用特性解析(上)
一、Go语言前言 Go是一种静态类型的编译语言,常常被称作是21世纪的C语言。Go语言是一个开源项目,可以免费获取编译器、库、配套工具的源代码,也是高性能服务器和应用程序的热门选择。 Go语言可以运行在类UNIX系统——比如Linux、OpenBSD、M…...

排序算法合集
F B I W a r n i n g : \color{red}FBI \qquad Warning: FBIWarning: 本人没有完整的计算机科班的教育经历,但是一直在兢兢业业,努力学习。 这些排序函数都是自己零零散散写的,也没有经过深思熟虑和优化,纯粹是为了自娱自乐。 …...

Vue2-全局事件总线、消息的订阅与发布、TodoList的编辑功能、$nextTick、动画与过渡
🥔:高度自律即自由 更多Vue知识请点击——Vue.js VUE2-Day9 全局事件总线1、安装全局事件总线2、使用事件总线(1)接收数据(2)提供数据(3)组件销毁前最好解绑 3、TodoList中的孙传父&…...

DP读书:鲲鹏处理器 架构与编程(八)3.1鲲鹏处理器片上系统与Taishan处理器内核架构
鲲鹏处理器片上系统架构 一、鲲鹏处理器片上系统与Taishan处理器内核架构1. 鲲鹏处理器片上系统概况a. 鲲鹏处理器片上系统与鲲鹏芯片家族b. 鲲鹏920处理器片上系统的组成部件c. 鲲鹏920处理器片上系统的特征d. 鲲鹏920处理器片上系统的逻辑结构 2. Taishan V110 处理器内核微架…...

如何使用 HOOPS Exchange SDK 和 Polygonica Bridge
这里将讨论使用 HOOPS Exchange 和 Polygonica 以及它们之间的桥梁进行 CAD 访问和网格处理。--提供Crack HOOPS 全系列SDK HOOPS Exchange 基础知识 首先,让我们简单回顾一下 HOOPS Exchange。HOOPS Exchange 是一款具有 C 接口的数据访问 SDK,支持导入…...

spring异步框架使用教程
背景 在需求开发过程中,为了提升效率,很容易就会遇到需要使用多线程的场景。这个时候一般都会选择建一个线程池去专门用来进行某一类动作,这种任务到来的时候往往伴随着大量的线程被创建调用。而还有另外一种场景是整个任务的执行耗时比较长…...
【数学建模】清风数模正课3 插值算法
插值算法 在数模比赛中,很多类型的题目都需要根据已知的函数点进行数据分析和模型处理; 当此时题目所给的数据较少时,我们就无法进行准确科学的分析,所以需要更多的数据,也就是函数点; 这就需要使用数学…...

什么是eval()?eval是用来干什么的?
一、什么是eval()? eval() 是 JavaScript 中的一个全局函数,用于解析并执行传递给它的字符串作为 JavaScript 代码。 二、eval()是用来干什么的? 当调用 eval() 时,它会将传入的字符串参数视为 JavaScript 代码,并在调用位置执…...

JavaScript-console:JavaScript控制台(Console)常用方法
一、理解 console JavaScript 控制台(console)是一个开发人员在编写 JavaScript 代码时常用的工具。它是浏览器提供的一种界面,让开发人员能够追踪代码执行的状态和结果。JavaScript 控制台可以记录代码输出的信息、警告和错误,并…...
Nginx配置前后端分离
后端地址 1.本地环境 curl --request GET \--url http://localhost:8080/by-admin/captchaImage \--header Authorization: Bearer d7a035d9-b30c-4ca5-8951-8cec90607943确认后端 ip 端口 上下文 2.测试环境 部署到测试环境可能是 换成内网ip和内网服务端口(ip、端口 可能会…...

rabbitmq的发布确认
生产者将信道设置成 confirm 模式,一旦信道进入 confirm 模式, 所有在该信道上面发布的 消息都将会被指派一个唯一的 ID (从 1 开始),一旦消息被投递到所有匹配的队列之后,broker 就会发送一个确认给生产者(包含消息的唯一 ID)&…...

RISC-V公测平台发布· CoreMark测试报告
一. CoreMark简介 CoreMark是一款用于评估CPU性能的基准测试程序,它包含了多种不同的计算任务,包括浮点数、整数、缓存、内存等方面的测试。CoreMark的测试结果通常被用来作为CPU性能的参考,它可以帮助开发人员和系统管理员评估不同处理器和…...

模型微调(fine-tune)
一、关于模型微调的一些基础知识 1、模型微调(fine-tune) 微调(fine-tune)通过使用在大数据上得到的预训练好的模型来初始化自己的模型权重,从而提升精度。这就要求预训练模型质量要有保证。微调通常速度更快、精度更高。当然,自己…...
云农场种植:互联网+智慧牧场,为农业注入新的活力和创新
随着科技的不断发展,数字化农业正逐渐成为现代农业的趋势。传统农业面临着土地资源有限、劳动力不足等问题,而云农场种植模式通过数字化技术的运用,互联网养殖着重于“绿色、特色产品和智慧生态”,通过建立“线上养殖线下托养线上…...

Hadoop学习一(初识大数据)
目录 一 什么是大数据? 二 大数据特征 三 分布式计算 四 Hadoop是什么? 五 Hadoop发展及版本 六 为什么要使用Hadoop 七 Hadoop vs. RDBMS 八 Hadoop生态圈 九 Hadoop架构 一 什么是大数据? 大数据是指无法在一定时间内用常规软件工具对其内…...

linux定时备份MySQL数据库循环删除前30天的备份文件
linux定时备份MySQL数据库循环删除前30天的备份文件 一、 检查有没安装crond,如果没有,先安装 1、先检查一下有没有cron rpm -qa|grep cron如果输入上面命令有如下显示,则不需要安装 2、没有安装的话,就使用一下命令安装 yum -y install …...

利用最小二乘法找圆心和半径
#include <iostream> #include <vector> #include <cmath> #include <Eigen/Dense> // 需安装Eigen库用于矩阵运算 // 定义点结构 struct Point { double x, y; Point(double x_, double y_) : x(x_), y(y_) {} }; // 最小二乘法求圆心和半径 …...
Linux链表操作全解析
Linux C语言链表深度解析与实战技巧 一、链表基础概念与内核链表优势1.1 为什么使用链表?1.2 Linux 内核链表与用户态链表的区别 二、内核链表结构与宏解析常用宏/函数 三、内核链表的优点四、用户态链表示例五、双向循环链表在内核中的实现优势5.1 插入效率5.2 安全…...

Linux相关概念和易错知识点(42)(TCP的连接管理、可靠性、面临复杂网络的处理)
目录 1.TCP的连接管理机制(1)三次握手①握手过程②对握手过程的理解 (2)四次挥手(3)握手和挥手的触发(4)状态切换①挥手过程中状态的切换②握手过程中状态的切换 2.TCP的可靠性&…...
vue3 字体颜色设置的多种方式
在Vue 3中设置字体颜色可以通过多种方式实现,这取决于你是想在组件内部直接设置,还是在CSS/SCSS/LESS等样式文件中定义。以下是几种常见的方法: 1. 内联样式 你可以直接在模板中使用style绑定来设置字体颜色。 <template><div :s…...
C++中string流知识详解和示例
一、概览与类体系 C 提供三种基于内存字符串的流,定义在 <sstream> 中: std::istringstream:输入流,从已有字符串中读取并解析。std::ostringstream:输出流,向内部缓冲区写入内容,最终取…...

第 86 场周赛:矩阵中的幻方、钥匙和房间、将数组拆分成斐波那契序列、猜猜这个单词
Q1、[中等] 矩阵中的幻方 1、题目描述 3 x 3 的幻方是一个填充有 从 1 到 9 的不同数字的 3 x 3 矩阵,其中每行,每列以及两条对角线上的各数之和都相等。 给定一个由整数组成的row x col 的 grid,其中有多少个 3 3 的 “幻方” 子矩阵&am…...

《信号与系统》第 6 章 信号与系统的时域和频域特性
目录 6.0 引言 6.1 傅里叶变换的模和相位表示 6.2 线性时不变系统频率响应的模和相位表示 6.2.1 线性与非线性相位 6.2.2 群时延 6.2.3 对数模和相位图 6.3 理想频率选择性滤波器的时域特性 6.4 非理想滤波器的时域和频域特性讨论 6.5 一阶与二阶连续时间系统 6.5.1 …...
WEB3全栈开发——面试专业技能点P4数据库
一、mysql2 原生驱动及其连接机制 概念介绍 mysql2 是 Node.js 环境中广泛使用的 MySQL 客户端库,基于 mysql 库改进而来,具有更好的性能、Promise 支持、流式查询、二进制数据处理能力等。 主要特点: 支持 Promise / async-await…...
node.js的初步学习
那什么是node.js呢? 和JavaScript又是什么关系呢? node.js 提供了 JavaScript的运行环境。当JavaScript作为后端开发语言来说, 需要在node.js的环境上进行当JavaScript作为前端开发语言来说,需要在浏览器的环境上进行 Node.js 可…...

向量几何的二元性:叉乘模长与内积投影的深层联系
在数学与物理的空间世界中,向量运算构成了理解几何结构的基石。叉乘(外积)与点积(内积)作为向量代数的两大支柱,表面上呈现出截然不同的几何意义与代数形式,却在深层次上揭示了向量间相互作用的…...