SpringCloudAlibaba全网最全讲解之Nacos(建议收藏)
yuyutoo 2024-10-12 00:15 4 浏览 0 评论
五、服务治理:Nacos
5.1、服务治理概述
服务治理是微服务架构中最核心最基本的模块。用于实现各个微服务的自动化注册与发现。
- 服务注册:在服务治理框架中,都会构建一个注册中心,每个服务单元向注册中心登记自己提供服务的详细信息。并在注册中心形成一张服务的清单,服务注册中心需要以心跳的方式去监测清单中的服务是否可用,如果不可用,需要在服务清单中剔除不可用的服务。
- 服务发现:服务调用方向服务注册中心咨询服务,并获取所有服务的实例清单,实现对具体服务实例的访问。
5.2、注册中心的原理
- 我们在启动的时候,就会把服务的信息告诉注册中心,同时拉去一份最新的1服务列表信息在本地。
- 每隔一段时间就会去给注册中心发送一个心跳包,告诉注册中心我还活着,同时会拉去一份最新的服务列表信息。
- 如果这个服务挂了,那么他就不会再给注册中心发送心跳包了。注册中心发现连续几次都没有发送心跳包,那么注册中心就会将这个服务的节点信息给剔除掉,从而1实现动态的注册和踢出服务,就不需要我们手动管理。
服务注册中心是微服务架构中1一个十分重要的组件,在微服务架构中11起到了一个协调者的作用,注册中心一般包含这几个功能:
- 服务发现: 服务注册:保存服务提供者和服务调用者的信息。 服务订阅:服务调用者订阅服务提供者的信息,注册中心向订阅者推送提供者的信息。
- 服务配置: 配置订阅:服务提供者和服务调用者订阅微服务相关的配置。 配置下发:主动将配置推送给服务提供者和服务调用者。
- 服务健康检测:检测服务提供者的健康情况,如果发现服务连续几次都没有发送心跳包,说明这个服务有异常,执行服务剔除。
5.3、常见的注册中心
5.3.1、Zookeeper
Zookeeper是一个分布式服务框架,是Apache Hadoop 的一个子项目,它主要是用来解决分布式应用中经常遇到的一些数据管理问题,如:统一命名服务、状态同步服务、集群管理、分布式应用配置项的管理等。
5.3.2、Eureka
Eureka是Springcloud Netflflix中的重要组件,主要作用就是做服务注册和发现。但是现在已经闭源
5.3.3、Consul
Consul是基于GO语言开发的开源工具,主要面向分布式,服务化的系统提供服务注册、服务发现和配置管理的功能。Consul的功能都很实用,其中包括:服务注册/发现、健康检查、Key/Value存储、多数据中心和分布式一致性保证等特性。Consul本身只是一个二进制的可执行文件,所以安装和部署都非常简单,只需要从官网下载后,在执行对应的启动脚本即可。
5.3.4、Nacos
Nacos是一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。它是 SpringCloud Alibaba 组件之一,负责服务注册发现和服务配置。
5.4、Nacos简介
Nacos是阿里巴巴2018年7月推出来的一个开源项目,是一个更易于构建云原生应用的动态服务注册与发现、配置管理和服务管理平台。Nacos致力于快速实现动态服务注册与发现、服务配置、服务元数据及流量管理。
它的核心功能:
- 服务注册:
Nacos Client会通过发送REST请求想Nacos Server注册自己的服务,提供自身的元数据,比如IP地址,端口等信息。Nacos Server接收到注册请求后,就会把这些元数据存储到一个双层的内存Map中。 2. 服务心跳:
在服务注册后,Nacos Client会维护一个定时心跳来维持统治Nacos Server,说明服务一直处于可用状态,防止被剔除,默认5s发送一次心跳。 3. 服务同步:
Nacos Server集群之间会相互同步服务实例,用来保证服务信息的一致性。 4. 服务发现:
服务消费者(Nacos Client)在调用服务提供的服务时,会发送一个REST请求给Nacos Server,获取上面注册的服务清单,并且缓存在Nacos Client本地,同时会在Nacos Client本地开启一个定时任务拉取服务最新的注册表信息更新到本地缓存。 5. 服务健康检查:
Nacos Server 会开启一个定时任务来检查注册服务实例的健康情况,对于超过15s没有收到客户端心跳的实例会将他的healthy属性设置为false(客户端服务发现时不会发现),如果某个实例超过30s没有收到心跳,直接剔除该实例(被剔除的实例如果恢复发送心跳则会重新注册)。
5.5、Nacos实战
5.5.1、搭建Nacos环境
5.5.1.1、下载Nacos环境
我们需要去下载地址下载Nacos,下载的Nacos是zip格式的安装包,然后进行解压缩操作。如果在Linux的话需要执行:
tar -zxvf Nacos下载包的名称
复制代码
5.5.1.2、启动
我们以Windows下为例,Linux下也是一样的。我们直接切换到bin目录下,然后cmd,输入命令:
startup.cmd -m standalone
复制代码
单机环境必须带-m standalone参数启动,否则无法启动,不带参数启动的是集群环境。
我们不带参数(以集群方式启动),会出现下列错误。
正确启动:
5.5.1.3、测试
打开浏览器输入http://localhost:8848/nacos/index.html#/login ,即可访问服务,默认账号密码都是nacos。
5.5.2、将商品服务注册到Nacos
5.5.2.1、添加依赖
我们需要在shop-product-server模块中的pom.xml文件中添加nacos的依赖。
<!--nacos客户端-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
复制代码
5.5.2.2、在主类上添加注解
@SpringBootApplication
@EnableDiscoveryClient
public class ShopProductServerApp {
public static void main(String[] args) {
SpringApplication.run(ShopProductServerApp.class,args);
}
}
复制代码
5.5.2.3、添加Nacos服务地址
我们需要在application.yml中添加nacos服务的地址。
spring:
cloud:
nacos:
discovery:
server-addr: localhost:8848
复制代码
5.5.2.4、查看
说明注册成功!
5.5.3、将订单服务注册到Nacos
接下来开始修改 shop-order-server 模块的代码, 将其注册到nacos服务上
5.5.3.1、添加依赖
<!--nacos客户端-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
复制代码
5.5.3.2、添加注解
@SpringBootApplication
@EnableDiscoveryClient
public class ShopOrderServerApp {
public static void main(String[] args) {
SpringApplication.run(ShopOrderServerApp.class,args);
}
@Bean
@LoadBalanced
public RestTemplate getInstance(){
return new RestTemplate();
}
}
复制代码
5.5.3.3、添加Nacos服务地址
spring:
cloud:
nacos:
discovery:
server-addr: localhost:8848
复制代码
5.5.3.4、测试
5.5.4、编写测试代码
@Autowired
private DiscoveryClient discoveryClient;
@RequestMapping("test")
public String test(){
ServiceInstance serviceInstance = discoveryClient.getInstances("product-service").get(0);
return serviceInstance.toString();
}
复制代码
相关推荐
- 自卑的人容易患抑郁症吗?(自卑会导致抑郁吗)
-
Filephoto[Photo/IC]Lowself-esteemmakesusfeelbadaboutourselves.Butdidyouknowthatovert...
- 中考典型同(近)义词组(同义词考题)
-
中考典型同(近)义词组...
- BroadcastReceiver的原理和使用(broadcast-suppression)
-
一、使用中注意的几点1.动态注册、静态注册的优先级在AndroidManifest.xml中静态注册的receiver比在代码中用registerReceiver动态注册的优先级要低。发送方在send...
- Arduino通过串口透传ESP 13板与java程序交互
-
ESP13---是一个无线板子,配置通过热点通信Arduino通过串口透传ESP13板与java程序交互...
- zookeeper的Leader选举源码解析(zookeeper角色选举角色包括)
-
作者:京东物流梁吉超zookeeper是一个分布式服务框架,主要解决分布式应用中常见的多种数据问题,例如集群管理,状态同步等。为解决这些问题zookeeper需要Leader选举进行保障数据的强一致...
- 接待外国人英文口语(接待外国友人的英语口语对话)
-
接待外国人英文口语询问访客身份: MayIhaveyourname,please? 请问您贵姓? Whatcompanyareyoufrom? 您是哪个公司的? Could...
- 一文深入理解AP架构Nacos注册原理
-
Nacos简介Nacos是一款阿里巴巴开源用于管理分布式微服务的中间件,能够帮助开发人员快速实现动态服务发现、服务配置、服务元数据及流量管理等。这篇文章主要剖析一下Nacos作为注册中心时其服务注册与...
- Android面试宝典之终极大招(android面试及答案)
-
以下内容来自兆隆IT云学院就业部,根据多年成功就业服务经验,以及职业素养课程部分内容,归纳总结:18.请描述一下Intent和IntentFilter。Android中通过Intent...
- 除了Crontab,Swoole Timer也可以实现定时任务的
-
一般的定时器是怎么实现的呢?我总结如下:1.使用Crontab工具,写一个shell脚本,在脚本中调用PHP文件,然后定期执行该脚本;2.ignore_user_abort()和set_time_li...
- Spark源码阅读:DataFrame.collect 作业提交流程思维导图
-
本文分为两个部分:作业提交流程思维导图关键函数列表作业提交流程思维导图...
- 使用Xamarin和Visual Studio开发Android可穿戴设备应用
-
搭建开发环境我们需要做的第一件事情是安装必要的工具。因此,你需要首先安装VisualStudio。如果您使用的是VisualStudio2010,2012或2013,那么请确保它是一个专业版本或...
- Android开发者必知的5个开源库(android 开发相关源码精编解析)
-
过去的时间里,Android开发逐步走向成熟,一个个与Android相关的开发工具也层出不穷。不过,在面对各种新鲜事物时,不要忘了那些我们每天使用的大量开源库。在这里,向大家介绍的就是,在这个任劳任怨...
- Android事件总线还能怎么玩?(android实现事件处理的步骤)
-
顾名思义,AndroidEventBus是一个Android平台的事件总线框架,它简化了Activity、Fragment、Service等组件之间的交互,很大程度上降低了它们之间的耦合,使我们的代码...
- Android 开发中文引导-应用小部件
-
应用小部件是可以嵌入其它应用(例如主屏幕)并收到定期更新的微型应用视图。这些视图在用户界面中被叫做小部件,并可以用应用小部件提供者发布。可以容纳其他应用部件的应用组件叫做应用部件的宿主(1)。下面的截...
你 发表评论:
欢迎- 一周热门
-
-
前端面试:iframe 的优缺点? iframe有那些缺点
-
带斜线的表头制作好了,如何填充内容?这几种方法你更喜欢哪个?
-
漫学笔记之PHP.ini常用的配置信息
-
推荐7个模板代码和其他游戏源码下载的网址
-
其实模版网站在开发工作中很重要,推荐几个参考站给大家
-
[干货] JAVA - JVM - 2 内存两分 [干货]+java+-+jvm+-+2+内存两分吗
-
正在学习使用python搭建自动化测试框架?这个系统包你可能会用到
-
织梦(Dedecms)建站教程 织梦建站详细步骤
-
【开源分享】2024PHP在线客服系统源码(搭建教程+终身使用)
-
2024PHP在线客服系统源码+完全开源 带详细搭建教程
-
- 最近发表
-
- 自卑的人容易患抑郁症吗?(自卑会导致抑郁吗)
- 中考典型同(近)义词组(同义词考题)
- WPF 消息传递简明教程(wpf messagebox.show)
- BroadcastReceiver的原理和使用(broadcast-suppression)
- Arduino通过串口透传ESP 13板与java程序交互
- zookeeper的Leader选举源码解析(zookeeper角色选举角色包括)
- 接待外国人英文口语(接待外国友人的英语口语对话)
- 一文深入理解AP架构Nacos注册原理
- Android面试宝典之终极大招(android面试及答案)
- 除了Crontab,Swoole Timer也可以实现定时任务的
- 标签列表
-
- mybatis plus (70)
- scheduledtask (71)
- css滚动条 (60)
- java学生成绩管理系统 (59)
- 结构体数组 (69)
- databasemetadata (64)
- javastatic (68)
- jsp实用教程 (53)
- fontawesome (57)
- widget开发 (57)
- vb net教程 (62)
- hibernate 教程 (63)
- case语句 (57)
- svn连接 (74)
- directoryindex (69)
- session timeout (58)
- textbox换行 (67)
- extension_dir (64)
- linearlayout (58)
- vba高级教程 (75)
- iframe用法 (58)
- sqlparameter (59)
- trim函数 (59)
- flex布局 (63)
- contextloaderlistener (56)