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

news2024/11/25 22:46:57

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.coloradmin.cn/o/1090424.html

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

相关文章

强缓存和协商缓存

强缓存和协商缓存 缓存分为强缓存和协商缓存。强缓存不过服务器&#xff0c;协商缓存需要过服务器&#xff0c;协商缓存返回的状态码是304。两类缓存机制可以同时存在&#xff0c;强缓存的优先级高于协商缓存。当执行强缓存时&#xff0c;如若缓存命中&#xff0c;则直接使用缓…

京东数据平台:2023年9月京东洗衣机行业品牌销售排行榜

鲸参谋监测的京东平台9月份洗衣机市场销售数据已出炉&#xff01; 9月份洗衣机行业销售呈下滑状态。鲸参谋数据显示&#xff0c;9月京东平台洗衣机的总销量为116万&#xff0c;环比下滑约1%&#xff0c;同比下滑约13%&#xff1b;月销售额为17亿&#xff0c;环比下滑约7%&…

【漏洞复现】安全云平台存在任意文件下载getshell

漏洞描述 深圳市强鸿电子有限公司鸿运主动安全云平台存在任意文件下载漏洞,攻击者可通过此漏洞下载敏感文件信息。 免责声明 技术文章仅供参考,任何个人和组织使用网络应当遵守宪法法律,遵守公共秩序,尊重社会公德,不得利用网络从事危害国家安全、荣誉和利益,未经授权…

SQL Server修改表结构

在SQL Server中修改的关键字是 ALTER(改变;(使)更改;修改(衣服使更合身);改动&#xff09; 列操作 添加列 添加列操作 alter tabel 表名 add 列名 数据类型--给员工表添加一个邮箱 alter的翻译是&#xff08;改变&#xff09; alter table people add PeopleMail varchar(2…

Chrome插件精选 — 鼠标手势插件

Chrome实现同一功能的插件往往有多款产品&#xff0c;逐一去安装试用耗时又费力&#xff0c;在此为某一类型插件记录下比较好用的一款或几款&#xff0c;便于节省尝试的时间和精力。 下面是两款比较好用的鼠标手势插件&#xff0c;支持很多设置选项&#xff0c;可以自定义手势&…

某Kr网站逆向webpack 全扣补环境法

持续创作文章&#xff0c;只是为了更好的思考 今天来讲一个比较简单的webpack全扣的网站&#xff0c;因为隐私安全性&#xff0c;许多东西不便放出&#xff0c;这里直接先看加密接口吧&#xff0c;接口是一个手机号验证码登录的接口&#xff0c;如下。 首先我们看下加密参数&a…

【日常业务开发】接口性能优化

【日常业务开发】接口性能优化 缓存本地缓存分布式缓存 数据库分库分表SQL 优化 业务程序并行化异步化池化技术预先计算事务粒度批量读写锁的粒度尽快return上下文传递空间换时间集合空间大小 缓存 本地缓存 本地缓存&#xff0c;最大的优点是应用和cache同一个进程内部&…

估算总体标准差的极差均值估计法sigma = R/d2

总体标准差的估算值可以通过将平均极差除以合适的常数因子d2来计算。这个估算方法是用于估算总体标准差的一种常见方法&#xff0c;尤其在质量控制和过程监控中经常使用。 总体标准差的估算值 (平均极差) / d2 其中&#xff1a; "总体标准差的估算值" 表示用极差…

ChatGPT生产力|实用指令(prompt)

GPT已经成为一个不可或缺的科研生产力了&#xff0c;但是大多数人只知晓采用直接提问、持续追问以及细节展开的方式来查阅相关资料&#xff0c;本文侧重于探讨“限定场景限定角色限定主题”、“可持续追问细节展开”等多种方式来获取更多信息&#xff0c;帮人们解决更多问题。 …

Qt应用开发(基础篇)——列表视图 QListView

一、前言 QListView类继承于QAbstractItemView类&#xff0c;提供了一个列表或者图标视图的模型。 视图基类 QAbstractItemView QListView效果相当于Windows文件夹右键->查看->图标和列表&#xff0c;使用setViewMode()设置视图模式&#xff0c;并且提供setIconSize()函数…

【特纳斯电子】基于物联网的空气质量检测-仿真设计

视频及资料链接&#xff1a;基于物联网的空气质量检测-仿真设计 - 电子校园网 (mcude.com) 编号&#xff1a; T0082203M-FZ 设计简介&#xff1a; 本设计是基于物联网的空气质量检测系统&#xff0c;主要实现以下功能&#xff1a; 1.通过OLED显示模式、温度、湿度、PM2.5、…

第七章:命令行操作基础

命令行操作基础 一、 配置网络设备的方法1. 通过Console口本地访问2. 通过网络口访问2.1 使用Telnet进行连接2.2 使用SSH进行连接 二、 命令行使用基础1. 命令行试图1.1用户视图1.2 系统视图1.3 接口视图 2.视图的切换2.1 system-view 3. interface g0/04. quit5. return 三、 …

发现更多美景!XnViewMP for Mac/Windows 图片浏览软件

想要轻松快捷地浏览、管理和编辑您的照片吗&#xff1f;XnViewMP for Mac 是您的最佳选择&#xff01;这款强大而多功能的图片浏览软件将给您带来全新的视觉体验。 借助 XnViewMP&#xff0c;您可以方便地浏览各种图片格式&#xff0c;包括JPEG、PNG、GIF等&#xff0c;并支持…

MySQL系列---Online DDL

目录 背景实验总结技术官网原理 背景 一直以为任何DDL操作都会造成锁表&#xff0c;所以之前每次线上业务需要DDL时都会停机维护&#xff0c;而一维护就需要熬夜&#xff0c;为了不熬夜&#xff0c;所以一直都在想DDL和DML为啥不能并行。 偶尔拿测试环境试了一下才知道&#x…

vue2中render函数学习思维导图

vue2之renderjsx从细节入手&#xff0c;彻底掌握 父组件 .vue <template><div><myCom :msg"msg" :data-list"dataList" on-change"comChange" /></div> </template> <script> import myCom from ./render…

使用eBPF加速阿里云服务网格ASM

背景 随着云原生应用架构的快速发展&#xff0c;微服务架构已经成为了构建现代应用的主要方式之一。而在微服务架构中&#xff0c;服务间的通信变得至关重要。为了实现弹性和可伸缩性&#xff0c;许多组织开始采用服务网格技术来管理服务之间的通信。 Istio作为目前最受欢迎的…

ardupilot开发 --- External LEDs篇

概述 夜航灯&#xff0c;LED状态灯&#xff0c;显示飞机当前状态&#xff1b; 支持的连接方式&#xff1a; I2C for external LED or RGB LEDs I^2C总线连接&#xff1b;SERVOx_FUNCTION for serially programmed device 串行连接&#xff1b;CANBUS for DroneCAN LEDs CAN总…

C# 往多线程传递安全参数的方法

在C#构造一个线程时&#xff0c;要向其传递一个函数&#xff0c;这个函数可以试简单的无参函数&#xff0c;也可以是参数为Object类型的函数&#xff0c;但是由于参数类型为Object&#xff0c;因此编译器无法实行类型检查&#xff0c;看下面的例子&#xff1a; class Program{…

JDBC-day04(数据库事务)

六&#xff1a;数据库事务 1.数据库事务介绍 事务&#xff1a;一组逻辑操作单元,使数据从一种状态变换到另一种状态。 事务处理&#xff08;事务操作&#xff09;&#xff1a;保证所有事务都作为一个工作单元来执行&#xff0c;即使出现了故障&#xff0c;都不能改变这种执行…

使用Swift开发Framework遇到的问题及解决方法

文章目录 一、Swift 旧版本Xcode 打出来的framework 新版本不兼容问题 一、Swift 旧版本Xcode 打出来的framework 新版本不兼容问题 Cannot load module xxx built with SDK ihphoneos16.4 when using SDK iphoneos17.0:XXX/xxx.framework/Modules/xxx.swiftmodule/arm64-appl…