Springcloud笔记(2)-Eureka服务注册中心

Eureka服务注册

Eureka作为一个微服务的治理中心,它是一个服务应用,可以接收其他服务的注册,也可以发现和治理服务实例。

服务治理中心是微服务(分布式)架构中最基础和最核心的功能组件,它主要对各个服务实例进行管理,包括服务注册和服务发现

本文参考:springcloud教程 -- 1.快速搭建入门级demo,看这一篇就够了-CSDN博客

两个组件

Eureka包含两个组件:Eureka Server和Eureka Client。 

Eureka Server提供服务注册,各个节点启动后,会在Eureka Server中进行注册,这样Eureka Server中的服务注册表中将会存储所有可用服务节点的信息,服务节点的信息可以在界面中直观的看到。

Eureka Client用于简化与Eureka Server的交互,在应用启动后,将会向Eureka Server发送心跳,如果Eureka Server在多个心跳周期内没有接收到某个节点的心跳,Eureka Server将会从服务注册表中把这个服务节点移除。

eureka模块

这里的一个模块就是一个微服务。

主要依赖,这个依赖用于指明当前服务为eureka server。

 <dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-server</artifactId><version>4.0.0</version></dependency>

新建一个服务,需要在主工程上右键选择new->module

j-cloud-server-eureka的启动类需加上注解@EnableEurekaServer, 来声明其是一个基于Eureka的服务注册发现中心

注解@EnableEurekaServer,它代表着在Spring Boot应用启用之时,也启动Eureka服务器。此时,我们以Java Application的形式运行,就能够启用Eureka服务治理中心

eureka的配置文件,定义了defaultZone: http://jorian:123456@localhost:8761/eureka 这个配置用来声明要将服务注册到哪个eureka上,但是本服务是eureka server服务,所以用reguster-with-eureka为false来指明不需要注册本服务。(是否注册都可以)

配置介绍

●spring.application.name:配置的是Spring应用的名称,也是微服务的名称,在Spring Cloud中,一个微服务可以拥有多个实例。

●eureka.client.register-with-eureka:这个配置项是取消当前微服务,寻找其他Eureka服务治理中心进行注册。

●eureka.client.fetch-registry:取消服务获取功能,关于服务获取,本章后续会讨论。●eureka.client.serviceUrl.defaultZone:如果需要注册微服务,可以通过这个属性来配置服务治理中心的注册地址,完成服务注册的功能。 

启动主程序,访问http://localhost:8761/

可以看到没有注册任何服务。

生产者模块

j-cloud-provider1

依赖,该依赖用来配置eureka的client服务。

     <dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-client</artifactId></dependency>

在该服务的application添加eureka配置,指明要将服务注册到这个eureka地址上。这就是服务注册。

配置文件的application name还指明了这个服务的名字。

启动类添加注解:@EnableEurekaClient来声明其是一个client(生产者或者消费者,在这里他是生产者)

启动该程序,在euraka可以看到该服务已注册到eureka上。这就是服务发现。

新建一个provider2注册到eureka,并启用。

两个生产者要用同样的application name,代表同一个应用的两个实例

(两个生产者模块用来演示负载均衡策略) 

架构图

所谓微服务,是指完成某一业务功能的独立系统。一个微服务可以有多个实例,所谓实例,是指一个具体的服务节点。

为什么要有多个服务节点?

1、高可用,即使某个节点不可用时,服务仍可用。

2、高性能,在大并发情况下,分摊请求压力。

实例对Eureka服务治理中心发送REST风格的请求,将自己的相关配置发送到Eureka服务治理中心完成注册。

消费者模块

新建消费者模块consumer并配置。

url的服务器和端口被定义为了provider-user,与生产者配置项spring.application.name是一致的,这样Eureka服务治理中心就知道你在请求哪个服务。

@RequestMapping("/hello")
    public String hello(){
        //指出服务地址   http://{服务提供者应用名名称}/{具体的controller}
        String url="http://provider-user/user/sayHello";
 
        //返回值类型和我们的业务返回值一致
        return resttemplate.getForObject(url, String.class);

访问http://localhost:8001/hello

即可以访问到生产者返回的信息。 

负载均衡

eureka配置了ribbon负载均衡策略(如果已经在模块中引入了spring-cloud-starter-netflix-eureka-client,它的父pom便会自动引入spring-cloud-starter-netflix-ribbon)

消费者的请求会在客户端被决定好发送到哪台服务提供者进行处理。

重复访问消费者地址N次,因为配置了两个生产者,http://localhost:8001/hello,会发现返回结果在两个provider切换,实现了负载均衡

多个服务注册中心

实际使用时,部署多个服务注册中心,防止服务注册中心宕机导致服务不可用。 

源码:2504973175/j-cloud - 码云 - 开源中国 (gitee.com)

Eureka服务治理原理

Eureka服务治理有以下几个重要概念。

服务治理中心-就是eureka服务

服务提供者--注册到eureka上,所以eureka可以对其进行治理。在本文中就是provider-user。

服务消费者-  服务的消费者会调用其他微服务,如本文消费者调用的provider-user,Eureka会解析类似provider-user这样的微服务名称。解析的过程是,首先根据这个名称从服务治理中心获取服务提供者的实例列表,保存在本地,然后通过特定的负载均衡的策略确定具体的实例,最后通过请求该实例获取数据。例子中使用了Ribbon来实现服务消费。

看另一个例子

 微服务实例和服务治理中心的关系

任何的微服务都可以对Eureka服务治理中心(也称为Eureka服务端)发送REST风格的请求。在Eureka的机制中,一般是由具体的微服务(也称为Eureka客户端)来主动维持它们之间的关系。微服务向注册中心发送restful风格请求,可以请求在服务中心注册、续约、下线

注册:微服务启动后,向eureka发消息注册自己的实例。

续约:微服务实例会按照一个频率对Eureka服务器维持心跳,告诉Eureka该实例是可用的,借此来避免被Eureka服务端剔除出去

下线:在系统出现故障,需要停止或者重启某个微服务实例的时候,在正常操作下,实例会对Eureka发送下线REST风格请求,告知服务治理中心,这样客户端就不能再请求这个实例了

服务治理中心互相关系

Eureka可以有效地管理具体的微服务实例。但是服务治理中心之间和本身也会提供一定的服务,甚至可以说服务治理中心也是Eureka客户端,因为它也可以注册到其他的Eureka服务器中,被其他的Eureka服务器治理

相互复制:Eureka本身也会相互注册,以保证高可用和高性能。各个Eureka服务器之间也会相互复制,也就是当微服务发生注册、下线和续约这些操作的时候,Eureka会将这些消息转发到其他服务治理中心的实例上,这样就完成同步了

服务剔除:在实际的工作中,有时候有些服务会因为网络故障、内存溢出或者宕机而导致服务不能正常工作,这个时候就要将这些无效的服务实例剔除出去

●自我保护:用来检测自己是否正常。

微服务之间互相调用

服务获取:服务获取是指微服务实例作为Eureka的客户端,从Eureka服务治理中心获取其他微服务实例清单的功能,通过一种负载均衡的算法选择其中的一个实例进行调用

●服务调用。服务调用是指一个微服务调用另一个微服务的过程。在Spring Cloud中,大部分会采用REST风格请求

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

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

相关文章

kafka生产者发送消息报错 Bootstrap broker localhost:9092 (id: -1 rack: null) disconnected

报这个错误是因为kafka里的配置要修改下 在config目录下 server.properties配置文件 这下发送消息就不会一直等待&#xff0c;就可以发送成功了

CTFHub SSRF 题目

文章目录 CTFHub SSRF 通关教程1. 内网访问&#xff0c;伪协议利用1.1 内网访问1.2 伪协议读取文件1.3 端口扫描 2. POST请求&#xff0c;上传文件&#xff0c;FastCGI协议&#xff0c;Redis协议2.1 POST请求2.2 上传文件2.3 FastCGI协议2.4 Redis协议 3. Bypass系列3.1 URL By…

Macos数字音乐库:Elsten Software Bliss for Mac

Elsten Software Bliss for Mac是一款优秀的音乐管理软件&#xff0c;它可以帮助用户自动化整理和标记数字音乐库&#xff0c;同时可以自动识别音乐信息并添加标签和元数据。 此外&#xff0c;Bliss还可以修复音乐库中的问题&#xff0c;例如重复的音乐文件和缺失的专辑封面等…

Apache Dubbo 首个 Node.js 3.0-alpha 版本正式发布

作者&#xff1a;蔡建怿 关于Apache Dubbo3 Apache Dubbo 是一款易用、高性能的 WEB 和 RPC 框架&#xff0c;同时为构建企业级微服务提供服务发现、流量治理、可观测、认证鉴权等能力、工具与最佳实践。经过近几年发展&#xff0c;Dubbo3 已在阿里巴巴集团各条业务线实现全面…

关于如何进行ChatGPT模型微调的新手指南

微调是指在预训练的模型基础上&#xff0c;通过进一步的训练来调整模型以适应特定任务或领域。预训练的模型在大规模的文本数据上进行了广泛的学习&#xff0c;从中获得了一定的知识和语言理解能力。然而&#xff0c;由于预训练并不针对具体任务&#xff0c;因此需要微调来使模…

深耕全面预算管理 拥抱企业数字未来

随着世界数字未来的不断发展&#xff0c;我国也正经历着一场更大范围、更深层次的科技变革。企业面对构建内部生态平衡体系的艰巨任务&#xff0c;对于其信息化部署也提出了更高的要求。增强预算编制的全面性&#xff0c;启动预算管理一体化改革成为了我国企业提高数字化水平的…

实验3:左右循环LED灯

获取流水灯工程&#xff1a; 方式一&#xff1a; keilproteus 完成最小系统&#xff0c;点亮led 灯实验_吴小凹的博客-CSDN博客 方式二&#xff1a; Flowing_led.zip - 蓝奏云直接下载。 原理图修改&#xff1a; 无须修改只需要使用流水灯的工程即可&#xff0c;解压到桌面…

SQL sever中的索引

目录 一、索引定义 二、索引结构 2.1. B-树索引结构&#xff1a; 2.2. 哈希索引结构&#xff1a; 三、索引作用 四、索引与约束区别 五、索引级别 六、索引分类 6.1. 聚集索引&#xff08;Clustered Index&#xff09;&#xff1a; 6.2. 非聚集索引&#xff08;Noncl…

2023年09月 C/C++(六级)真题解析#中国电子学会#全国青少年软件编程等级考试

C/C编程&#xff08;1~8级&#xff09;全部真题・点这里 Python编程&#xff08;1~6级&#xff09;全部真题・点这里 第1题&#xff1a;生日相同 在一个有180人的大班级中&#xff0c;存在两个人生日相同的概率非常大&#xff0c;现给出每个学生的名字&#xff0c;出生月日。试…

redis简介和配置教程

redis简洁版教程 一、概述1、简介2、特点3、优势 二、配置 一、概述 1、简介 Redis是一个高性能的 key-value 数据库。 2、特点 Redis支持数据的持久化&#xff0c;可以将内存中的数据保存在磁盘中&#xff0c;重启的时候可以再次加载进行使用。Redis不仅仅支持简单的key-v…

基于nodejs+vue校园失物招领平台设计与实现

科学技术日新月异的如今&#xff0c;计算机在生活各个领域都占有重要的作用&#xff0c;尤其在信息管理方面&#xff0c;在这样的大背景下&#xff0c;学习计算机知识不仅仅是为了掌握一种技能&#xff0c;更重要的是能够让它真正地使用到实目 录 摘 要 I ABSTRACT II 目 录 II…

【Pytorch】深度学习之损失函数

文章目录 二分类交叉熵损失函数交叉熵损失函数L1损失函数MSE损失函数平滑L1(Smooth L1)损失函数目标泊松分布的负对数似然损失KL散度MarginRankingLoss多标签边界损失函数二分类损失函数多分类的折页损失三元组损失HingEmbeddingLoss余弦相似度CTC损失函数参考资料 学习目标&am…

[Python小项目] 从桌面壁纸到AI绘画

从桌面壁纸到AI绘画 一、前言 1.1 确认问题 由于生活和工作需要&#xff0c;小编要长时间的使用电脑&#xff0c;小编又懒&#xff0c;一个主题用半年的那种&#xff0c;所以桌面壁纸也是处于常年不更换的状态。即时改变主题也是在微软自带的壁纸中选择&#xff0c;而这些自…

1.安装环境

学习Java的第一步应该从配置环境开始&#xff0c;这篇博文介绍了在哪下载安装包以及如何在windows电脑中配置环境&#xff0c;希望大家看完后可以独立安装 ~ 文章目录 一、下载安装包二、 配置环境 一、下载安装包 安装包可以从官网下载&#xff0c;也可以直接私信我拿取。这里…

三、静态路由实验

拓扑图&#xff1a; 两个路由器分了三个网段出来&#xff0c;首先对两台PC机进行配置 进入R1路由器对两边链路进行ip配置 对AR2进行相同的配置&#xff0c;然后我们查看R1的路由表&#xff0c;里面有一些直连的信息。 三个网段的设备现在可以互通&#xff0c;我们要实现跨网段…

python flask接口字段存在性校验函数(http接口字段校验)(返回提示缺少的字段信息)validate_fields()

文章目录 字段存在性校验示例 字段存在性校验 from flask import Flask, request, jsonifyapp Flask(__name__)def validate_fields(data, fields):missing_fields [field for field in fields if field not in data]if missing_fields:return False, f"缺少以下字段: …

[elasticsearch]使用postman来查询数据

最近需要debug程序&#xff0c;debug的时候需要查找elasticsearch里面的数据是否正确。 第一步建立一个post请求&#xff0c;并按照图下的方式填上ur和参数&#xff1a; 发送post请求&#xff0c;url为&#xff1a; http://ip:port/index_name/_search我这里查询的是title字…

Linux桌面环境(桌面系统)

早期的 Linux 系统都是不带界面的&#xff0c;只能通过命令来管理&#xff0c;比如运行程序、编辑文档、删除文件等。所以&#xff0c;要想熟练使用 Linux&#xff0c;就必须记忆很多命令。 后来随着 Windows 的普及&#xff0c;计算机界面变得越来越漂亮&#xff0c;点点鼠标…

母婴用品会员商城小程序的作用是什么

随着政策放松&#xff0c;母婴行业相比以前迎来了更高的发展空间&#xff0c;由于可以与多个行业连接&#xff0c;因此市场规模也是连年上升&#xff0c;母婴用品是行业重要的分支&#xff0c;近些年从业商家连年增加&#xff0c;但在实际经营中&#xff0c;商家所遇经营痛点也…

spark读取hive表字段,区分大小写问题

背景 spark任务读取hive表&#xff0c;查询字段为小写&#xff0c;但Hive表字段为大写&#xff0c;无法读取数据 问题错误: 如何解决呢&#xff1f; In version 2.3 and earlier, when reading from a Parquet data source table, Spark always returns null for any column …