SpringCloud之Nacos的学习、快速上手

1、什么是Nacos

Nacos是阿里的一个开源产品,是针对微服务架构中的服务发现、配置管理、服务治理的综合型解决方案,用来实现配置中心和服务注册中心。

Nacos 快速开始

2、安装运行nacos

nacos下载地址

下载地址: https://github.com/alibaba/nacos/releases
zip为Windows压缩包        tar.gz为linux压缩包

个人百度网盘分享链接:https://pan.baidu.com/s/1RTNA0Gx5chpyb-HXCOuJuw?pwd=8848 
提取码:8848 

下载解压后运行nacos    进入bin目录  执行下面命令即可        -m为启动模式,设置为单机模式运行

startup.cmd -m standalone

如果不想每次输入-m standalone可以右键startup.cmd使用文本打开修改配置即可

这样我们只需要双击startup.bat文件即可自动在单机模式下运行nacos

默认端口8848        

浏览器访问localhost:8848/nacos即可进入nacos控制台        账号密码默认都是nacos

3、Nacos注册中心的使用

将微服务注册到nacos

准备了两个微服务分别是订单微服务商品微服务

需要引入的依赖为

<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId><version>2.2.5.RELEASE</version>
</dependency>

3.1在application.yml文件中需要配置服务名称和nacos连接地址        

注意:服务名称不能重复        服务名称不能没有

重复则nacos视为一个服务        没有nacos扫描不到则服务列表不显示

spring:application:name: product-servicecloud:nacos:discovery:server-addr: localhost:8848

3.2在启动类是加上注解@EnableDiscoveryClient(不加也可以)

@SpringBootApplication
@EnableDiscoveryClient
public class OrderServer {public static void main(String[] args) {SpringApplication.run(OrderServer.class,args);}
}

启动两个微服务

观察nacos控制台在服务列表可以看到刚刚启动的两个微服务

4、Nacos注册中心的原理

Nacos将服务可以分为服务消费者服务提供者        

在我的项目中现在有订单和商品微服务,在订单服务中需要调用商品服务查询商品信息

则可以将订单微服务称为服务消费者,将商品微服务称为服务提供者

4.1服务注册流程:

1、product-service服务向nacos注册中心进行服务注册,同时对nacos上现有的已经存在的服务进行服务拉取,并将拉取到的服务列表缓存到本地列表

2、注册成功后定时向nacos发送心跳,告诉nacos这个服务正常运行

3、同时,order-service服务也执行上述操作,注册服务、拉取服务、缓存服务到本地、定时发送心跳

 4.2服务怎么从注册中心获取呢

@RestController
@Slf4j
public class NacosController {//注入服务发现接口@Autowiredprivate DiscoveryClient discoveryClient;@GetMapping("test")public void test(){//获取服务名称为product-service的服务,得到的是一个List的实例集合//因为有可能有多个实例List<ServiceInstance> instances = discoveryClient.getInstances("order-service");//获取第一个实例,也就是获取的实例列表中的第一个实例ServiceInstance serviceInstance = instances.get(0);//获取这个实例的端口int port = serviceInstance.getPort();//获取这个实例的访问地址String host = serviceInstance.getHost();log.info("获取服务名为order-service的第一个服务:{}",serviceInstance);log.info("获取服务名为order-service的第一个服务port:{}",port);log.info("获取服务名为order-service的第一个服务host:{}",host);}
}

我们对这个接口进行访问

4.3对接口进行调用

在需要调用的服务的启动类上加上@Bean交给Spring管理

@SpringBootApplication
public class OrderServer {public static void main(String[] args) {SpringApplication.run(OrderServer.class,args);}@Beanpublic RestTemplate restTemplate(){return new RestTemplate();}
}

然后在我们的order-service业务中进行调用

@Service
@Slf4j
public class OrderServiceImpl implements IOrderService {@Autowiredprivate OrderDao orderDao;@Autowiredprivate RestTemplate restTemplate;@Autowiredprivate DiscoveryClient discoveryClient;@Overridepublic void createOrder(Long productId,Long userId) {log.info("接收到{}号商品的下单请求,接下来调⽤商品微服务查询此商品信息",productId);//远程调⽤商品微服务,查询商品信息List<ServiceInstance> instances = discoveryClient.getInstances("product-service");ServiceInstance serviceInstance = instances.get(0);int port = serviceInstance.getPort();String host = serviceInstance.getHost();Product product = restTemplate.getForObject("http://" + host + ":" + port + "/product/" + productId, Product.class);log.info("查询到{}号商品的信息,内容是:{}", productId,JSON.toJSONString(product));}
}

我们写一个方法执行上面的逻辑即可

@RestController
@Slf4j
public class OrderController {@Autowiredprivate IOrderService orderService;@RequestMapping("/save")public void order(Long pid,Long uid){return orderService.createOrder(pid, uid);}
}

当我们访问这个接口后,查看控制台

已经成功调用商品服务

当然这样服务调用很麻烦,所以后面我们会使用openfeign替换

4.4当nacos检测到某个服务出现问题

此时我们查看nacos控制台

两个服务都正常

当我们停掉product-service服务        当大概十五秒后查看nacos可以看到商品服务成为了不健康实例        这是因为nacos十五秒没有收到这个服务发送的心跳就认为这个服务是不健康的

再大概过十五秒        发现商品服务已经没有了,这是因为nacos超过三十秒没有感知到这个服务,则这个服务则会被Nacos剔除。

4.5关闭Nacos服务会怎么样

当Nacos意外停止时,还能调用服务吗

我们将商品服务和订单服务重新都启动起来

这时候我们关闭Nacos的控制台

这时候我们访问localhost:8848/nacos已经访问不到了,但是此时我们调用服务会怎么样呢?

我们继续调用刚才的/save方法

可以看到仍然获取到了商品信息,即调用到了商品服务的接口

这是因为当nacos关闭时,但是本地缓存的依然存在(在上面我们说了每次获取到服务列表后会将服务列表缓存到本地),所以才能仍然获取到这个实例的信息并进行调用。

但是当我们关闭商品服务后,测试获取商品服务的实例

@RestController
@Slf4j
public class NacosController {@Autowiredprivate DiscoveryClient discoveryClient;@GetMapping("test")public void test(){List<ServiceInstance> instances = discoveryClient.getInstances("product-service");ServiceInstance serviceInstance = instances.get(0);int port = serviceInstance.getPort();String host = serviceInstance.getHost();log.info("获取服务名为product-service的第一个服务:{}",serviceInstance);log.info("获取服务名为product-service的第一个服务port:{}",port);log.info("获取服务名为product-service的第一个服务host:{}",host);}
}

访问test接口

可以看到即使商品服务关闭了,但是仍能获取到商品服务的实例,这是因为缓存到本地之后,没有了nacos的推送更新,导致只从缓存中获取实例信息,就会导致我们后面业务调用异常

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/636195.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Linux】Linux系统的生态

Linux中安装软件 Linux中安装软件一般有三种方式&#xff1a; 源代码安装rpm包安装yum安装 1.源代码安装 有些软件本来就是开源的&#xff0c;如果不想用别人直接发布好的软件&#xff0c;我们就可以把源代码下载下来&#xff0c;在我们的环境中编译&#xff0c;自己安装 …

防伪技术行业研究:年复合增长率约为10%

近年来&#xff0c;我国各种新的防伪技术不断涌现&#xff0c;部分防伪技术已经达到国际先进水平&#xff0c;并广泛应用于产品防伪、票证防伪等领域&#xff0c;推动了防伪行业的持续、健康发展。 常见的产品防伪技术有&#xff1a;隐形分子技术、二维码防伪、揭开留底防伪、安…

【设计模式 创建型】单例模式

类的单例设计模式&#xff0c;就是采取一定的方法保证在整个的软件系统中&#xff0c;对某个类只能存在一个对象实例&#xff0c;并且该类只提供一个取得其对象实例的方法&#xff08;静态方法&#xff09; 指一个类只有一个实例&#xff0c;且该类能自行创建这个实例的一种模…

「Kafka」Broker篇

「Kafka」Broker篇 主要讲解的是在 Kafka 中是怎么存储数据的&#xff0c;以及 Kafka 和 Zookeeper 之间如何进行数据沟通的。 Kafka Broker 总体工作流程 Zookeeper 存储的 Kafka 信息 启动 Zookeeper 客户端&#xff1a; [atguiguhadoop102 zookeeper-3.5.7]$ bin/zkCli.sh通…

时间复杂度的排序

在计算机科学中&#xff0c;不同的算法有不同的时间复杂度。以下是一些常见的时间复杂度&#xff0c;并按照它们的增长速度从低到高排序&#xff1a; O(1) - 常数时间复杂度&#xff1a; 表示算法的执行时间是固定的&#xff0c;不随输入规模的增加而变化。例如&#xff0c;直接…

使用 Docker 部署 的WAF: 雷池社区版

Web应用防火墙&#xff08;WAF&#xff09;是保护网站不受恶意攻击的关键组件。 使用 Docker 部署雷池社区版&#xff0c;可以大大简化安全管理工作。 一、WAF 雷池社区版简介 雷池社区版是一种流行的开源 Web 应用防火墙&#xff0c;它提供基本的安全保护&#xff0c;如防止…

多维表格产品vika多维表、Flowus、Wolai体验记录

昨天从下午6点肝到凌晨2点多体验低代码平台多维表格产品&#xff0c;体验了3个国内产品&#xff0c;vika多维表、Flowus、Wolai。 具有多维表格新型关系数据库的鼻祖是 Airtable&#xff0c;国内模仿产品有vika多维表、飞书多维表格等。 还有一种类型就是以在国内鼎鼎大名的N…

细讲Labview条件结构用法及易错点

本文讲解Labview条件结构的常用情景及易错点注意事项。帮助大家深刻理解并使用该结构&#xff0c;欢迎点赞关注加评论&#xff0c;有问题可以私聊或在下方评论区留言。 本文程序均附在文章结尾&#xff0c;可自行下载学习。 博主之前讲过Labview事件结构、For循环等的基础知识介…

每日OJ题_算法_滑动窗口⑥_力扣438. 找到字符串中所有字母异位词

目录 力扣438. 找到字符串中所有字母异位词 解析及代码1 解析及代码2 力扣438. 找到字符串中所有字母异位词 438. 找到字符串中所有字母异位词 - 力扣&#xff08;LeetCode&#xff09; 难度 中等 给定两个字符串 s 和 p&#xff0c;找到 s 中所有 p 的 异位词 的子串&am…

Mac Could not find the GDAL library 问题解决

目录 1. 参考2. 问题描述3. 解决步骤3.1. 安装依赖包3.2. 配置 GDAL_LIBRARY_PATH3.3. 配置 GEOS_LIBRARY_PATH 1. 参考 https://docs.djangoproject.com/en/5.0/ref/contrib/gis/install/#macos 2. 问题描述 苹果系统 Mac 中搭建 GeoDjango 开发环境时出现以下报错&#xf…

第十四章 MyBatis

第十四章 MyBatis 1.入门-课程介绍2.入门-快速入门程序3.配置SQL提示4.入门-JDBC5.入门-数据库连接池6.入门-lombok工具包介绍7.基础操作-环境准备8.基础操作-删除9.基础操作-删除&#xff08;预编译SQL&#xff09;10.基础操作-新增11.基础操作-新增&#xff08;主键返回&…

Python初识——小小爬虫

一、找到网页端url 打开浏览器&#xff0c;打开百度官方网页点击图片&#xff0c;打开百度图片 鼠标齿轮向下滑&#xff0c;点击宠物图片 进入宠物图片网页&#xff0c;在网页空白处点击鼠标右键&#xff0c;弹出的框中最下方显示“检查”选项&#xff0c;点击&#xff08;我是…

安全帽识别-赋能深圳自贸中心智慧工地

在当今的建筑行业中&#xff0c;安全管理一直是一个至关重要的议题。深圳自贸中心项目在这方面进行了一次有益的尝试——实施智慧工地安全帽识别系统。本文将对这一创新举措进行简要介绍。 项目背景 深圳自贸中心&#xff0c;作为一项标志性建设项目&#xff0c;承载着城市发展…

云的网络安全优势

在考虑迁移到云计算时&#xff0c;网络安全已经成为一个关键因素。毫无疑问&#xff0c;企业希望通过网络浏览器或移动应用为员工、合作伙伴和客户提供一致的数据和应用访问权限&#xff0c;以保持竞争力。 网络攻击的性质和重要性正变得越来越复杂&#xff0c;并造成严重的财…

【ASP.NET Core 基础知识】--路由和请求处理--Attribute路由

一、介绍 在ASP.NET Core中&#xff0c;路由是将传入的URL请求映射到正确的控制器和操作的方法。Attribute路由是一种基于属性&#xff0c;用于定义路由规则的方式&#xff0c;通过在控制器类和操作方法上应用特定的属性&#xff0c;来定义URL模板。 基本概念&#xff1a; **路…

线性代数逆矩阵的求法

在线性代数中&#xff0c;逆矩阵是一个非常重要且有趣的概念。一个 n 阶方阵 A 的逆矩阵&#xff0c;记作 A^-1&#xff0c;是指存在另一个 n 阶方阵 B&#xff0c;使得 A 和 B 的乘积等于单位矩阵 E&#xff0c;即&#xff1a; A * B E 或者等价地&#xff1a; B * A E 这里…

uniapp技术积累

2024.01.19 1.textarea &#xff08;1&#xff09;默认文字样式设置 placeholder-style"color:rgba(0,0,0,0.7)" 2024.01.18 1.hbuilderx运行uniapp到ipad&#xff08;复用率低&#xff09; &#xff08;1&#xff09;电脑端&#xff1a;首先会有一个运行工具包&…

只用Mysql搞一个分布式锁

在web开发中&#xff0c;分布式的锁的应用场景甚多&#xff0c;我们可以通过分布式锁来进行一些仅依赖于数据库的事务很难直接保证原子性的操作&#xff0c;比如多种不同数据源的访问&#xff0c;网络通信等等。多数情况下我们会使用memcache的add, redis中在set中指定nx参数等…

怎么用小程序将身份证转为结构化Excel?

随着科技的不断发展&#xff0c;我们的生活变得越来越智能化。现在&#xff0c;我们可以使用金鸣表格文字识别小程序来识别身份证并转为结构化的excel&#xff0c;并且可自动核对真伪&#xff0c;保留头像。金鸣表格文字识别小程序是一种基于人工智能技术的应用程序&#xff0c…

nacos,nginx及java服务自重启

微服务之服务自重启 设置Nacos开机自启在/lib/systemd/system文件夹下创建nacos.service文件 [Unit] Descriptionnacos Afternetwork.target[Service] Typeforking ExecStart/opt/nacos-server-1.4.1/nacos/bin/startup.sh -m standalone ExecReload/opt/nacos-server-1.4.1/…