Spring Cloud服务发现与注册的原理与实现
Spring Cloud服务发现与注册的原理与实现
- 一、简介
- 1 服务发现的定义
- 2 服务发现的意义
- 二、Spring Cloud服务注册与发现的实现
- 1 Spring Cloud服务注册
- 1.1 服务注册的基本框架
- 1.2 服务注册的实现方式
- 2 Spring Cloud服务发现
- 2.1 服务发现的基本框架
- 2.2 服务发现的实现方式
- 三、Spring Cloud服务注册与发现的原理
- 3.1 Eureka的原理
- 3.1.1 Eureka的基本概念
- 3.1.2 Eureka的工作原理
- 注册中心
- 服务实例
- 3.2 Zookeeper的原理
- 3.2.1 Zookeeper的基本概念
- 数据模型
- 会话
- 3.2.2 Zookeeper的工作原理
- 3.3 Consul的原理
- 3.3.1 Consul的基本概念
- 服务发现
- 健康检查
- 3.3.2 Consul的工作原理
- 四、Spring Cloud服务注册与发现的应用场景
- 4.1 微服务架构中的应用场景
- 4.2 服务治理与负载均衡的应用场景
- 4.3 分布式集群中的应用场景
一、简介
1 服务发现的定义
服务发现是指在一个分布式系统中,服务提供者将自己注册到系统中心,并且服务消费者可以从系统中心查询所有可用的服务的过程。
2 服务发现的意义
通过服务发现,服务消费者可以方便地获取可用的服务实例,而无需了解服务实例的具体位置和部署情况。同时,服务提供者也可以方便地将自己的服务注册到系统中心,让使用方更容易地找到服务。
二、Spring Cloud服务注册与发现的实现
1 Spring Cloud服务注册
1.1 服务注册的基本框架
服务注册的基本框架包括三部分:服务提供者、服务注册中心和服务消费者。其中,服务提供者将自己注册到服务注册中心,服务消费者从服务注册中心获取可用的服务列表。
1.2 服务注册的实现方式
Spring Cloud提供了几种服务注册的实现方式,包括:
- Eureka:Netflix公司开源的、最为流行的一种服务注册中心;
- Consul:由Hashicorp公司开发的一种服务发现组件,支持多数据中心;
- ZooKeeper:由Apache项目开发的一种分布式协调框架。
这里以Eureka为例,介绍Spring Cloud服务注册的实现方式。
首先需要在pom.xml文件中添加以下依赖:
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
接着,在启动类中加上@EnableEurekaServer注解,表明该服务作为Eureka Server运行:
@SpringBootApplication
@EnableEurekaServer
public class EurekaServerApplication {public static void main(String[] args) {SpringApplication.run(EurekaServerApplication.class, args);}
}
在配置文件application.yml中指定服务端口、Eureka相关配置:
server:port: 8761eureka:instance:hostname: localhostclient:register-with-eureka: falsefetch-registry: false
至此,Eureka Server配置完成。
2 Spring Cloud服务发现
2.1 服务发现的基本框架
服务发现的基本框架也包括三部分:服务提供者、服务注册中心和服务消费者。其中,服务提供者将自己注册到服务注册中心,服务消费者从服务注册中心获取可用的服务列表。
2.2 服务发现的实现方式
同样以Eureka为例,介绍Spring Cloud服务发现的实现方式。
服务提供者需要在pom.xml文件中添加以下依赖:
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
在启动类中加上@EnableDiscoveryClient注解,表明该服务需要作为Eureka Client运行,并向Eureka Server注册:
@SpringBootApplication
@EnableDiscoveryClient
public class DemoServiceApplication {public static void main(String[] args) {SpringApplication.run(DemoServiceApplication.class, args);}
}
同时,在配置文件application.yml中指定应用名称、Eureka相关配置:
spring:application:name: demp-serviceeureka:client:service-url:defaultZone: http://localhost:8761/eureka/
至此,服务提供者的配置完成。
服务消费者需要在pom.xml文件中添加以下依赖:
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
在需要调用服务的地方使用@LoadBalanced注解,让RestTemplate具有负载均衡的能力:
@Bean
@LoadBalanced
public RestTemplate restTemplate() {return new RestTemplate();
}
同时,在配置文件application.yml中指定应用名称、Eureka相关配置:
spring:application:name: demp-service-consumereureka:client:service-url:defaultZone: http://localhost:8761/eureka/
至此,服务消费者的配置完成。
通过以上配置,Spring Cloud可以实现服务注册和发现的功能。
三、Spring Cloud服务注册与发现的原理
3.1 Eureka的原理
3.1.1 Eureka的基本概念
注册中心:
Eureka server是Spring Cloud的核心组件之一,它提供了服务注册和发现的功能。即服务提供者将自己的服务注册到Eureka Server,服务消费者从Eureka Server中查找所需的服务并进行调用。
服务实例:
服务实例是指暴露出来的某个服务,可以是普通的Java服务、也可以是Web Service服务等。
3.1.2 Eureka的工作原理
注册中心
注册中心是一个基于REST的服务,主要实现服务注册、服务续约、服务下线以及查询功能。Eureka Server接收服务实例的注册请求,并将服务实例信息存储在内存中(HashMap)。当Eureka Server收到服务实例的续约请求时,会更新服务实例在内存中的信息,避免服务实例过期失效。也可以通过URL获取注册中心中所有可用的服务。
服务实例
服务实例启动后会向Eureka Server发送注册请求,告知Eureka Server自己的地址(ip:port)、服务名、健康状态以及一些元数据。同时服务实例会以心跳的方式向Eureka Server发送服务续约请求,在规定时间内没有接收到续约请求,则视为服务实例失效。
3.2 Zookeeper的原理
3.2.1 Zookeeper的基本概念
Zookeeper是一个分布式协调服务,主要应用于高可用场景下的协调任务。Zookeeper提供了数据地址、配置管理、同步等功能。
数据模型
Zookeeper所有的数据都保存在一个树形结构中,每个节点称为一个Znode。每个Znode都有名称和数据两个部分组成。数据通常是空字符串,但是也可以存储数据。
会话
不同的客户端需要连接到Zookeeper集群进行交互,这些客户端与Zookeeper服务器建立会话。Zookeeper会话与传统应用服务器会话的概念类似,但具有独特的特征,如一些会话变量和超时机制。
3.2.2 Zookeeper的工作原理
Zookeeper集群中的各个节点通过Zab协议来实现数据一致性。集群中的一个Zookeeper节点被选举为leader,所有其它follower节点负责数据复制。当leader节点失效时,follower中的某一个节点会被选举为新的leader。
3.3 Consul的原理
3.3.1 Consul的基本概念
Consul是一个分布式的高可用服务发现和配置管理系统。它提供了服务发现、健康检查、KV存储、安全服务等功能。
服务发现
Consul基于HTTP提供服务发现。服务消费者可以使用HTTP协议从Consul服务端获取服务提供者的地址和端口号。
健康检查
Consul通过健康检查确定哪些服务实例对外提供服务。Consul同时支持TCP、HTTP和Docker容器的健康检查方式。
3.3.2 Consul的工作原理
Consul集群实际上就是多个有状态的服务器管理和协调数据。这些节点中的一个被选为leader,所有其它follower节点负责数据复制。
四、Spring Cloud服务注册与发现的应用场景
4.1 微服务架构中的应用场景
在微服务架构中,服务之间可能会随时发生变化,例如某个服务重启、一台机器下线等,因此服务访问地址的获取需要具备高度灵活性和实时性。服务注册中心的出现就是为了解决这个问题,它可以自动进行服务注册和服务发现,大大提高了系统的可扩展性和可维护性。
4.2 服务治理与负载均衡的应用场景
服务金丝雀发布、分阶段上线、AB测试等操作,都离不开服务治理,而服务治理又需要服务注册中心来协同实现。在这些高级应用场景中,服务注册中心还可以和负载均衡器等组件配合,提供更加全面的服务治理和负载均衡功能。
4.3 分布式集群中的应用场景
在分布式系统中,节点数量大、拓扑图复杂,因此需要一个中心化的配置管理中心。服务注册中心可以实现系统配置的自动管理和更新,同时由于各个服务的名称是由它们自己注册到注册中心上的,因此它能够帮助开发人员快速获得系统内部服务之间的依赖关系。
相关文章:
Spring Cloud服务发现与注册的原理与实现
Spring Cloud服务发现与注册的原理与实现 一、简介1 服务发现的定义2 服务发现的意义 二、Spring Cloud服务注册与发现的实现1 Spring Cloud服务注册1.1 服务注册的基本框架1.2 服务注册的实现方式 2 Spring Cloud服务发现2.1 服务发现的基本框架2.2 服务发现的实现方式 三、Sp…...

FFmpeg入门之简单介绍
FFmpeg是什么意思: Fast Forward Moving Picture Experts Group ffmpeg相关文档: Documentation FFmpeg ffmpeg源码下载: https://git.videolan.org/git/ffmpeg.git https://github.com/FFmpeg/FFmpeg.git FFmpeg能做什么? 多种媒体格式的封装与解封装 : 1.多种音…...

新版DBeaver调整编辑窗口字体大小
网上有DBeave字体设置了,但看了下,目前最新版的已经更改了首选项分组,层级发生了变化,这里记录一下2022.08.21版的设置。 默认字体是10,比较小,改为11或更大会好看些。...

《vue3实战》运用push()方法实现电影评价系统的添加功能
目录 前言 电影评价系统的添加功能是什么? 电影评价系统的添加功能有什么作用? 一、push()方法是什么?它有什么作用? 含义: 作用: 二、功能实现 这段是添加开始时点击按钮使…...

JavaScript学习笔记02
JavaScript笔记02 数据类型详解 字符串 在 JavaScript 中正常的字符串都使用单引号 或者双引号" "包裹:例: 转义字符 在 JavaScript 字符串中也可用使用转义字符(参考:详解转义字符):例&…...

短信过滤 APP 开发
本文字数:7033字 预计阅读时间:42分钟 一直想开发一个自己的短信过滤 APP,但是一直没有具体实施,现在终于静下心来,边开发边记录下整体的开发过程。 01 垃圾短信样本 遇到的第一个问题是,既然要过滤垃圾短信…...
【计算机基础知识7】垃圾回收机制与内存泄漏
目录 前言 一、垃圾回收机制的工作原理 1. 标记-清除算法的基本原理 2. 垃圾回收器的类型及其工作方式 3. 垃圾回收的回收策略和触发机制 三、内存泄漏的定义和原因 1. 内存泄漏的概念和影响 2. 常见的内存泄漏情况及其原因 四、如何避免和处理内存泄漏 1. 使用合适…...

[学习笔记]CS224W
资料: 课程网址 斯坦福CS224W图机器学习、图神经网络、知识图谱【同济子豪兄】 斯坦福大学CS224W图机器学习公开课-同济子豪兄中文精讲 图的基本表示 图是描述各种关联现象的通用语言。与传统数据分析中的样本服从独立同分布假设不一样,图数据自带关联…...

华为云API对话机器人CBS的魅力—实现简单的对话操作
云服务、API、SDK,调试,查看,我都行 阅读短文您可以学习到:人工智能AI智能的问答管理、全面的对话管理、高效训练部署 1.IntelliJ IDEA 之API插件介绍 API插件支持 VS Code IDE、IntelliJ IDEA等平台、以及华为云自研 CodeArts …...

精益制造、质量管控,盛虹百世慧共同启动MOM(制造运营管理)
百世慧科技依托在电池智能制造行业中的丰富经验,与盛虹动能达成合作,为其提供MOM制造运营管理平台,并以此为起点,全面提升盛虹动能的制造管理水平与运营体系。 行业困境 中国动力电池已然发展为全球最大的电池产业,但…...

【科研论文配图绘制】task7密度图绘制
【科研论文配图绘制】task7密度图绘制 task7 了解密度图的定义,清楚密度图是常用使用常见,掌握密度图绘制。 1.什么是密度图 密度图(Density Plot)是一种用于可视化数据分布的图表类型。它通过在数据中创建平滑的概率密度曲线…...
Python3 集合
Python3 集合 集合(set)是一个无序的不重复元素序列。 可以使用大括号 { } 或者 set() 函数创建集合,注意:创建一个空集合必须用 set() 而不是 { },因为 { } 是用来创建一个空字典。 创建格式: parame …...

【山河送书第十期】:《Python 自动化办公应用大全》参与活动,送书两本!!
【山河送书第十期】:《Python 自动化办公应用大全》参与活动,送书两本!! 前言一书籍亮点二作者简介三内容简介四购买链接五参与方式六往期赠书回顾 前言 在过去的 5 年里,Python 已经 3 次获得 TIOBE 指数年度大奖&am…...
Java多线程——同步
同步是什么? 当两个线程同时对一个变量进行修改时,不同的访问顺序会造成不一样的结果,这时候就需要同步保证结果的唯一性。 未同步时 新建Bank类,transfer()用于在两个账户之间转账金额 class Bank {private double[] account…...

Vue+NodeJS实现邮件发送
一.邮箱配置 这里以QQ邮箱为例,网易邮箱类似. 设置->账号 二.后端服务搭建 index.js const express require(express) const router require(./router); const app express()// 使用路由文件 app.use(/,router);app.listen(3000, () > {console.log(server…...
Go语言网络编程(socket编程)TCP粘包
1、TCP粘包 服务端代码如下: // socket_stick/server/main.gofunc process(conn net.Conn) {defer conn.Close()reader : bufio.NewReader(conn)var buf [1024]bytefor {n, err : reader.Read(buf[:])if err io.EOF {break}if err ! nil {fmt.Println("read…...

【再识C进阶2(中)】详细介绍指针的进阶——函数指针数组、回调函数、qsort函数
前言 💓作者简介: 加油,旭杏,目前大二,正在学习C,数据结构等👀 💓作者主页:加油,旭杏的主页👀 ⏩本文收录在:再识C进阶的专栏…...

PaddleOCR学习笔记3-通用识别服务
今天优化了下之前的初步识别服务的python代码和html代码。 采用flask paddleocr bootstrap快速搭建OCR识别服务。 代码结构如下: 模板页面代码文件如下: upload.html : <!DOCTYPE html> <html> <meta charset"utf-8"> …...
9.8 校招 实习 内推 面经
绿泡*泡: neituijunsir 交流裙 ,内推/实习/校招汇总表格 1、校招 | 长安福特2024校园招聘正式启动 校招 | 长安福特2024校园招聘正式启动 2、2023校招总结--SLAM岗位 - 5 2023校招总结--SLAM岗位 - 5 3、校招&实习 | 格灵深瞳2024秋季校园招聘启…...
web前段与后端的区别优漫动游
要了解web前后端的区别,首先必须得清楚什么是web前端和web后端。 web前段与后端的区别 首先:web的本意是蜘蛛网和网的意思,在网页设计中我们称为网页的意思。现广泛译作网络、互联网等技术领域。表现为三种形式,即超文本(hyp…...
日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする
日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする 1、前言(1)情况说明(2)工程师的信仰2、知识点(1) にする1,接续:名词+にする2,接续:疑问词+にする3,(A)は(B)にする。(2)復習:(1)复习句子(2)ために & ように(3)そう(4)にする3、…...
1688商品列表API与其他数据源的对接思路
将1688商品列表API与其他数据源对接时,需结合业务场景设计数据流转链路,重点关注数据格式兼容性、接口调用频率控制及数据一致性维护。以下是具体对接思路及关键技术点: 一、核心对接场景与目标 商品数据同步 场景:将1688商品信息…...

DBAPI如何优雅的获取单条数据
API如何优雅的获取单条数据 案例一 对于查询类API,查询的是单条数据,比如根据主键ID查询用户信息,sql如下: select id, name, age from user where id #{id}API默认返回的数据格式是多条的,如下: {&qu…...
Python如何给视频添加音频和字幕
在Python中,给视频添加音频和字幕可以使用电影文件处理库MoviePy和字幕处理库Subtitles。下面将详细介绍如何使用这些库来实现视频的音频和字幕添加,包括必要的代码示例和详细解释。 环境准备 在开始之前,需要安装以下Python库:…...

优选算法第十二讲:队列 + 宽搜 优先级队列
优选算法第十二讲:队列 宽搜 && 优先级队列 1.N叉树的层序遍历2.二叉树的锯齿型层序遍历3.二叉树最大宽度4.在每个树行中找最大值5.优先级队列 -- 最后一块石头的重量6.数据流中的第K大元素7.前K个高频单词8.数据流的中位数 1.N叉树的层序遍历 2.二叉树的锯…...
uniapp 字符包含的相关方法
在uniapp中,如果你想检查一个字符串是否包含另一个子字符串,你可以使用JavaScript中的includes()方法或者indexOf()方法。这两种方法都可以达到目的,但它们在处理方式和返回值上有所不同。 使用includes()方法 includes()方法用于判断一个字…...
智能职业发展系统:AI驱动的职业规划平台技术解析
智能职业发展系统:AI驱动的职业规划平台技术解析 引言:数字时代的职业革命 在当今瞬息万变的就业市场中,传统的职业规划方法已无法满足个人和企业的需求。据统计,全球每年有超过2亿人面临职业转型困境,而企业也因此遭…...
用神经网络读懂你的“心情”:揭秘情绪识别系统背后的AI魔法
用神经网络读懂你的“心情”:揭秘情绪识别系统背后的AI魔法 大家好,我是Echo_Wish。最近刷短视频、看直播,有没有发现,越来越多的应用都开始“懂你”了——它们能感知你的情绪,推荐更合适的内容,甚至帮客服识别用户情绪,提升服务体验。这背后,神经网络在悄悄发力,撑起…...
跨平台商品数据接口的标准化与规范化发展路径:淘宝京东拼多多的最新实践
在电商行业蓬勃发展的当下,多平台运营已成为众多商家的必然选择。然而,不同电商平台在商品数据接口方面存在差异,导致商家在跨平台运营时面临诸多挑战,如数据对接困难、运营效率低下、用户体验不一致等。跨平台商品数据接口的标准…...
Python第七周作业
Python第七周作业 文章目录 Python第七周作业 1.使用open以只读模式打开文件data.txt,并逐行打印内容 2.使用pathlib模块获取当前脚本的绝对路径,并创建logs目录(若不存在) 3.递归遍历目录data,输出所有.csv文件的路径…...