二、Eureka注册中心

news2025/5/13 2:27:22

目录

注册中心主要有三种角色:

1、服务提供者(RPC Server)

2、服务消费者(RPC Client)

3、服务注册中心(Registry)

注册中心实现原理

常用的注册中心:

常用注册中心对比:

 Eureka 的工作流程:

一、搭建Eureka注册中心微服务,提供注册中心功能

1、在springcloud父项目下创建聚合项目springcloud-eureka,在springcloud-eureka项目的pom文件引入eureka服务端依赖

2、添加application.yml配置文件

3、添加EurekaApp.class启动类上添加注解@EnableEurekaServer表示当前项目为Eureka服务端

4、运行启动类

5、访问注册中心地址http://localhost:8090/

二、使用Eureka注册中心

1、在springcloud-member、springcloud-order、springcloud-pay项目的pom文件中添加eureka客户端依赖

2、在springcloud-member、springcloud-order、springcloud-pay项目的application.yml文件中分别添加以下配置

3、在springcloud-member、springcloud-order、springcloud-pay项目的启动类上添加注解@EnableEurekaClient表示当前项目为Eureka客户端

4、运行springcloud-member、springcloud-order、springcloud-pay项目的启动类

5、打开Eureka注册中心地址http://localhost:8090/

三、注册中心缓存更新

1、在springcloud-eureka项目的配置文件中,修改Eureka Server的配置

2、客户端配置文件修改


注册中心原理

注册中心主要有三种角色:

1、服务提供者(RPC Server)

在启动时,向 Registry 注册自身服务,并向 Registry 定期发送心跳汇报存活状态。

2、服务消费者(RPC Client)

在启动时,向 Registry 订阅服务,把 Registry 返回的服务节点列表缓存在本地内存中,并与 RPC Sever 建立连接。

3、服务注册中心(Registry)

用于保存 RPC Server 的注册信息,当 RPC Server 节点发生变更时,Registry 会同步变更,RPC Client 感知后会刷新本地 内存中缓存的服务节点列表。

最后,RPC Client 从本地缓存的服务节点列表中,基于负载均衡算法选择一台 RPC Sever 发起调用。

 

注册中心实现原理

1、服务的提供者在启动时把自身的服务接口信息注册到注册中心,这时每个服务与注册中心保持一个长连接,并以心跳包的形式与注册中心进行通讯

2、客户端在启动的时候往注册中心订阅它所需要的服务列表信息,把它订阅的服务列表缓存到本地

3、当客户端需要调用服务端接口时,从本地缓存中获取地址列表,通过本地负载均衡策略选择具体的服务地址,再通过RPC(FeignClient)进行远程调用

4、注册中心会保存服务地址列表信息和客户端的订阅信息

5、当服务出现不可用时(宕机),注册中心会剔出不可用服务地址,再通过事件通知给订阅的客户端

常用的注册中心:

  1. Eureka(netflix)  AP
  2. Zookeeper     CP
  3. Consul        CP
  4. Nacos(Alibaba)  AP/CP

常用注册中心对比:

 Eureka 的工作流程:

1、Eureka Server 启动成功,等待服务端注册。在启动过程中如果配置了集群,集群之间定时通过 Replicate 同步注册表,每个 Eureka Server 都存在独立完整的服务注册表信息。

2、Eureka Client 启动时根据配置的 Eureka Server 地址去注册中心注册服务。

3、Eureka Client 默认会每 30s 向 Eureka Server 发送一次心跳请求,证明客户端服务正常。

4、当 Eureka Server 90s 内没有收到 Eureka Client 的心跳,注册中心则认为该节点失效,会注销该实例。

5、单位时间内 Eureka Server 统计到有大量的 Eureka Client 没有上送心跳,则认为可能为网络异常,进入自我保护机制,不再剔除没有上送心跳的客户端。

6、当 Eureka Client 心跳请求恢复正常之后,Eureka Server 自动退出自我保护模式。

7、Eureka Client 定时全量或者增量从注册中心获取服务注册表,并且将获取到的信息缓存到本地。

8、服务调用时,Eureka Client 会先从本地缓存找寻调取的服务。如果获取不到,先从注册中心刷新注册表,再同步到本地缓存。

9、Eureka Client 获取到目标服务器信息,发起服务调用。

10、Eureka Client 程序关闭时向 Eureka Server 发送取消请求,Eureka Server 将实例从注册表中删除

一、搭建Eureka注册中心微服务,提供注册中心功能

1、在springcloud父项目下创建聚合项目springcloud-eureka,在springcloud-eureka项目的pom文件引入eureka服务端依赖

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

2、添加application.yml配置文件

server:
#设置注册中心服务端口号
  port: 8090

spring:
  application:
#设置应用名称
    name: server-eureka

eureka:
  client:
#注册中心同步注册信息,默认true
    fetch-registry: false
#将自己注册到注册中心,默认为true
    register-with-eureka: false

3、添加EurekaApp.class启动类上添加注解@EnableEurekaServer表示当前项目为Eureka服务端

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

4、运行启动类

5、访问注册中心地址http://localhost:8090/

访问到此页面说明注册中心已经配置完成了,可以看到当前注册中心并没有服务实例

6、项目结构

二、使用Eureka注册中心

1、在springcloud-member、springcloud-order、springcloud-pay项目的pom文件中添加eureka客户端依赖

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

2、在springcloud-member、springcloud-order、springcloud-pay项目的application.yml文件中分别添加以下配置

springcloud-member

spring:
  application:
    name: server-member

eureka:
  client:
    service-url:
      defaultZone: http://localhost:8090/eureka/

springcloud-order 

spring:
  application:
    name: server-order

eureka:
  client:
    service-url:
      defaultZone: http://localhost:8090/eureka/

springcloud-pay

spring:
  application:
    name: server-pay

eureka:
  client:
    service-url:
      defaultZone: http://localhost:8090/eureka/

3、在springcloud-member、springcloud-order、springcloud-pay项目的启动类上添加注解@EnableEurekaClient表示当前项目为Eureka客户端

 

4、运行springcloud-member、springcloud-order、springcloud-pay项目的启动类

5、打开Eureka注册中心地址http://localhost:8090/

 此时可以看到服务的实例信息,即表示完成了服务注册

三、注册中心缓存更新

Eureka 默认30s会从注册中心同步更新一次本地的缓存地址列表,所以当我们启动新的服务时,服务不会马上被访问到,需要等服务同步更新到本地缓存后才会被访问。

在Eureka注册中心里,有一个独有的机制-------自我保护机制,当网络分区发生故障时,微服务与Eureka Server之间无法正常通信,然后Eureka误以为服务宕机了,将服务从服务地址列表中剔出,其实这时服务运行是正常的,等网络恢复后即可正常使用了,这就造成了误判,因此Eureka的自我保护机制就是为了避免这种情况发生,当服务不可用时,启动自我保护机制,此时并不会把服务从地址列表中剔出,而是一直挂在服务地址列表中,但是服务并不会被调用到,只要服务和Eureka Server正常通信,服务又可以被重新调用了

在生产环境中一般会选择默认开启自我保护机制

在开发环境中一般会关闭开启自我保护机制

eureka:
  server:
#  关闭自我保护机制,保证不可用的服务及时被剔出
    enable-self-preservation: false
#  如果2秒内没有收到某个服务的心跳,那就剔出该微服务,单位为毫秒ms
    eviction-interval-timer-in-ms: 2000

1、在springcloud-eureka项目的配置文件中,修改Eureka Server的配置

server:
#设置服务端口号
  port: 8090

spring:
  application:
#设置应用名称
    name: server-eureka

eureka:
  client:
#注册中心同步注册信息,默认true
    fetch-registry: false
#将自己注册到注册中心,默认为true
    register-with-eureka: false
  server:
#  关闭自我保护机制,保证不可用的服务及时被剔出
    enable-self-preservation: false
#  如果2秒内没有收到某个服务的心跳,那就剔出该微服务,单位为毫秒ms
    eviction-interval-timer-in-ms: 2000

2、客户端配置文件修改

eureka:
  instance:
#    Eureka客户端向注册中心发送心跳的时间间隔是1s,默认是30s
    lease-renewal-interval-in-seconds: 1
#    Eureka服务端在收到一次心跳后等待时间上限是2s,默认是90s
#    超时将剔出该微服务,也可以在Eureka服务端进行设置
    lease-expiration-duration-in-seconds: 2

例如:server-order的配置文件修改如下

server:
  port: 9071

spring:
  application:
    name: server-order

eureka:
  instance:
  # 使用ip地址作为host,而不是机器号/电脑名称
    prefer-ip-address: true
#    Eureka客户端向注册中心发送心跳的时间间隔是1s,默认是30s
    lease-renewal-interval-in-seconds: 1
#    Eureka服务端在收到一次心跳后等待时间上限是2s,默认是90s
#    超时将剔出该微服务,也可以在Eureka服务端进行设置
    lease-expiration-duration-in-seconds: 2
  client:
    service-url:
      defaultZone: http://localhost:8090/eureka/

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

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

相关文章

【C/C++每日一练】总目录(更新至2023.5.12)

C/C 2023.05 2023.5.11-2023.5.12 20230512 1. 成绩打印 ※ 2. 按要求补齐数组 &#x1f31f;&#x1f31f;&#x1f31f; 3. 水仙花数 ※ 20230511 1. 最长公共前缀 &#x1f31f; 2. 打家劫舍 &#x1f31f;&#x1f31f; 3. 最接近的三数之和 &#x1f31f;&am…

修改通过CDH安装的Kafka和Zookeeper等组件的最大文件句柄数

目录 1.查看当前kafka最大文件句柄数 2.修改supervisord.service 服务配置文件 3.加载配置文件 4.重启supervisord.service服务 5.重启kafka等组件 6.查看修改后最大文件句柄数 7.查看kafka当前使用的文件句柄数 参考&#xff1a; 1.查看当前kafka最大文件句柄数 jpsc…

【rust】| 05——语法基础 | 流程控制

系列文章目录 【rust】| 00——开发环境搭建 【rust】| 01——编译并运行第一个rust程序 【rust】| 02——语法基础 | 变量(不可变?)和常量 【rust】| 03——语法基础 | 数据类型 【rust】| 04——语法基础 | 函数 【rust】| 05——语法基础 | 流程控制 文章目录 流程控制1. 条…

双向链表的功能实现

前言&#xff1a;我们已经学习并知道了单链表的实现&#xff0c;链表的实现方式不只是单链表一种&#xff0c;今天我们就来介绍一种新的结构&#xff0c;就是双链表结构&#xff0c;本质上是将节点间进行双向链接&#xff0c;从而使一些操作更加容易实现。 目录 1.双向链表的简…

OpenCL编程指南-3.3类型转换

隐式类型转换 隐式类型转换是一种自动的类型转换&#xff0c;只要混合使用不同的类型&#xff0c;编译器就会完成这种隐式类型转换。这里支持表4-1中定义的标量类型&#xff08;除void、double和half以外&#xff09;的隐式转换。完成隐式转换时&#xff0c;并不只是重新解释一…

MySQL:数据库的增删查改

我们这一篇主要介绍数据库的增删查改~ 增&#xff1a;insert into 表名 value (); 删&#xff1a;delete from 表名; 查&#xff1a;select from 表名; 改&#xff1a;update 表名; 目录 1.insert&#xff08;增&#xff09; 2.select&#xff08;查询&#xff09; 2.1 全列…

Goby 漏洞更新 |Telesquare TLR-2005Ksh 路由器 ExportSettings.sh 文件下载漏洞(CVE-2021-46423)

漏洞名称&#xff1a;Telesquare TLR-2005Ksh 路由器 ExportSettings.sh 文件下载漏洞&#xff08;CVE-2021-46423&#xff09; English Name&#xff1a;Telesquare TLR-2005Ksh ExportSettings.sh file download (CVE-2021-46423) CVSS core: 7.5 影响资产数&#xff1a;2…

勒索病毒“顽疾”,没有“特效药”吗?

基础设施瘫痪、企业和高校重要文件被加密、毕业论文瞬间秒没……这就是六年前的今天&#xff0c;WannaCry勒索攻击爆发时的真实场景。攻击导致150多个国家数百万台计算机受影响&#xff0c;也让勒索病毒首次被全世界广泛关注。 六年后&#xff0c;勒索攻击仍是全球最严重的网络…

bootp引导程序协议

bootp又称为引导程序协议,我们来简单了解一下这个协议以及他的用法。 1&#xff0c;BOOTP 请求和应答均被封装在 U D P数据报中 &#xff1b; 2&#xff0c;B O O T P使用 U D P&#xff0c;且通常需与 T F T P协同工作&#xff1b; 3&#xff0c;B O O T P有两个熟知端口&a…

选择合适的 MQTT 云服务:一文了解 EMQX Cloud Serverless、Dedicated 与 BYOC 版本

引言 EMQX Cloud 是基于 EMQX Enterprise 构建的一款全托管云原生 MQTT 消息服务。为了满足不同客户的需求&#xff0c;EMQX Cloud 提供了三种版本供客户选择&#xff1a;Serverless 版、专有版和 BYOC 版。 本文将简要介绍这三个版本的核心区别&#xff0c;并通过三个用户故…

【ChatGPT】体验一下ChatGPT

体验一下ChatGPT 可以帮你写代码、写邮件、编故事的神器 最近OpenAI 发布了备受期待的原型通用 ChatGPT&#xff0c;这是一种基于对话的 AI 聊天界面&#xff0c;算是GPT-3(Generative Pre-trained Transformer 3)的继承者&#xff0c;今天记录一下体验的过程&#xff0c;以前…

详解set/map的底层结构——AVL树和红黑树

目录 前文 一&#xff0c;AVL树 1.1 什么是AVL树&#xff1f; 1.2 AVL树节点的定义 1.3 insert—插入(重点) 1.4 旋转(重点) 1.4.1 右单旋 1.4.2 左单旋 1.4.3 左右双旋 1.4.4 右左双旋 1.5 IsBalanc(平衡判断) 1.6 中序遍历 1.7 测试 二&#xff0c;红黑树 2.1 什么…

非常提效的7款原型工具推荐

原型图工具允许在开发前进行测试和迭代过程&#xff0c;可以帮助节省大量的开发时间和成本。在本文中&#xff0c;我们盘点了7个易于使用的原型图工具&#xff0c;以提高您的生产力&#xff01; 1.即时设计 即时设计是一款免费的在线 UI 设计工具&#xff0c;无系统限制&…

自学黑客,一般人我劝你还是算了吧!

我为啥说自学黑客&#xff0c;一般人我还是劝你算了吧&#xff01;因为我就是那个不一般的人。 首先我谈下对黑客&网络安全的认知&#xff0c;其实最重要的是兴趣热爱&#xff0c;不同于网络安全工程师&#xff0c;他们大都是培训机构培训出来的&#xff0c;具备的基本都是…

【Python入门】Python的判断语句(if elif else语句)

前言 &#x1f4d5;作者简介&#xff1a;热爱跑步的恒川&#xff0c;致力于C/C、Java、Python等多编程语言&#xff0c;热爱跑步&#xff0c;喜爱音乐的一位博主。 &#x1f4d7;本文收录于Python零基础入门系列&#xff0c;本专栏主要内容为Python基础语法、判断、循环语句、函…

从0开始学习数据库

一个数据库最重要的部分是什么&#xff1f; 关系型数据库mysql有着四大特性&#xff0c;原子性&#xff0c;隔离性&#xff0c;一致性&#xff0c;持久性。 kv数据库有着原子性&#xff0c;持久性&#xff0c;弱一致性。 可见&#xff0c;不管数据库的存储引擎是什么&#xff0…

【计算机网络】第一章 计算机网络基础(期末急救包)

目录 前言 正文 考点 1.1 计算机网络组成 1.2 计算机网络的分类 ——4种 1.3计算机网络的性能指标 1.4 计算机网络标准化工作及相关组织 2.计算机网络体系结构与模型 结语 前言 期末将至&#xff0c;相信有的同学们还在为怎么过期末而发愁吧&#xff01;不用担心&#…

谈「效」风生 | 「自动化」聊起来简单,做起来难

#第4期&#xff1a;“自动化”聊起来简单&#xff0c;做起来难# 在上一期《如何找到现有研发体系的「内耗问题」》中&#xff0c;我们聊了评估现有研发体系&#xff0c;正确的找到“体系内耗问题”&#xff0c;是改变研发体系的第一步。本期我们继续聊下一个关键点就是研发体系…

多USB工业相机的使用

USB相机的使用 USB3.0引入了“SuperSpeed”(SS)传输速率。理论传输速度高达625 MByte/s, SuperSpeed传输可以在短时间内传输大量数据&#xff0c;适用于许多视觉应用。给出的带宽上限是一个理想化的理论值。对于实际应用&#xff0c;主机控制器&#xff08;Host Controller&am…

红黑树下岗,内核新数据结构上场:maple tree!

在外界看来&#xff0c;Linux 内核的内部似乎变化很少&#xff0c;尤其是像内存管理子系统&#xff08;memory-management subsystem&#xff09;这样的子系统。然而&#xff0c;开发人员时常需要更换内部接口来解决某些长期存在的问题。比如&#xff0c;其中一个问题就是用来保…