spring cloud 之 eureka

news2024/12/29 14:15:49

Eureka概述

Spring Cloud封装了Netflix 公司开发的Eureka模块来实现服务治理,SpringCloud将它集成在其子项目spring-cloud-netflix中

在服务注册与发现中,有一个注册中心。当服务器启动的时候,会把当前自己服务器的信息比如服务地址通讯地址等以别名方式注册到注册中心上

强调一下,eureka从2.0开源版本已经停止,不再维护,建议使用alibaba的nacos作为注册中新和配置中心 

Eureka核心原理 

Eureka组件

Eureka Server:Eureka Server提供服务注册服务,各个节点启动后,会在Eureka Server中进行注册

Eureka Client:Eureka Client用于简化与Eureka Server的交互,向注册中心注册、服务续约,下线、拉取注册信息

Eureka Server 和Eureka Client 都需要自己搭建,而nacos不需要自己搭建注册中心服务,各自的微服务中只需集成客户端即可

Eureka Server 

  Eureka Server提供服务注册服务,各个节点启动后,会在Eureka Server中进行注册,并且注册服务会对注册信息进行缓存

服务注册:服务提供者启动时,会通过 Eureka Client 向 Eureka Server 注册信息,Eureka Server 会存储该服务的信息,Eureka Server 内部有二层缓存机制来维护整个注册表,相当于注册服务会维护一个map来缓存信息

public abstract class AbstractInstanceRegistry implements InstanceRegistry {
    private static final Logger logger = LoggerFactory.getLogger(AbstractInstanceRegistry.class);
    private static final String[] EMPTY_STR_ARRAY = new String[0];
    private final ConcurrentHashMap<String, Map<String, Lease<InstanceInfo>>> registry = new ConcurrentHashMap();
    protected Map<String, RemoteRegionRegistry> regionNameVSRemoteRegistry = new HashMap();
    protected final ConcurrentMap<String, InstanceStatus> overriddenInstanceStatusMap;
    private final AbstractInstanceRegistry.CircularQueue<Pair<Long, String>> recentRegisteredQueue;
    private final AbstractInstanceRegistry.CircularQueue<Pair<Long, String>> recentCanceledQueue;
    private ConcurrentLinkedQueue<AbstractInstanceRegistry.RecentlyChangedItem> recentlyChangedQueue;

提供注册表:服务消费者在调用服务时,如果 Eureka Client 没有缓存注册表的话,会从 Eureka Server 获取最新的注册表

同步状态:Eureka Client 通过注册、心跳机制和 Eureka Server 同步当前客户端的状态

Eureka Client

在应用启动后,将会向Eureka Server发送心跳,默认周期为30秒,如果Eureka Server在多个心跳周期内没有接收到某个节点的心跳,Eureka  Server将会从服务注册表中把这个服务节点移除(默认90秒),Eureka Client 会拉取、更新和缓存 Eureka Server 中的信息

因此当所有的 Eureka Server 节点都宕掉,服务消费者依然可以使用缓存中的信息找到服务提供者,但是当服务有更改的时候会出现信息不一致

 服务注册:client在启动的时候将自身注册到注册服务它提供自身的元数据,比如 IP 地址、端口,运行状况指示符 URL,主页等

服务续约:Eureka Client服务注册后, 会每隔 30 秒发送一次心跳来续约。 通过续约来告知 Eureka Server 该 Eureka Client 运行正常,没有出现问题

服务剔除: Eureka Server启动时会创建一个定时任务,每隔60s执行一次,把当前注册表中超时(90s)没有续约的Eureka Client服务剔除,但实际上是180s剔除,这是Eureka的一个bug

在服务续约的时候将服务的过期时间修改为当前时间加90s,
后台线程检测线程(60s检测一次)判断注册信息是否需要过期剔除的时候,又将过期时间增加了 90s 然后和当前时间校对,相当于一共延后了180s

拉取注册列表:每隔30s 拉取Eureka Server注册实例信息。TimedSupervisorTask 固定周期性任务,一但超时就会将下一个任务的执行时间间隔增大一倍,直到超过最大任务执行间隔的限制,一旦任务不在超时,就会将任务的执行间隔恢复为默认值

服务下线:Eureka Client 在程序关闭时向 Eureka Server 发送取消请求。 发送请求后,该客户端实例信息将从 Eureka Server 的实例注册表中删除

Eureka Server搭建

添加依赖

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

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
</dependencies>

 添加配置

  application.yml

server:
  port: 9000
spring:
  application:
    name: cloud-eureka-server
eureka:
  client:
    service-url:
      defaultZone: http://127.0.0.1:9000/eureka/
    register-with-eureka: false

在启动类上添加服务中心注解@EnableEurekaServer

package com.slbuildenv.cloud;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;

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

}

启动访问 

 Eureka Client搭建

添加依赖

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

    </dependencies>

添加配置 

application.properties

server.port= 9400
spring.application.name= cloud-test-service
eureka.client.service-url.defaultZone= http://127.0.0.1:9000/eureka

添加客户端注解@EnableEurekaClient 

package com.slbuildenv.cloud;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;

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

启动测试

 可以看到我们的服务已经注册到Eureka Server上

Eureka集群配置

集群配置很简单,这里不做搭建,写一下集群配置如下:

eureka:
  client:
    register-with-eureka: true
    #是否从EurekaServer抓取已有的注册信息,默认为true。单节点无所谓,集群必须设置为true才能配合ribbon使用负载均衡
    fetchRegistry: true
    service-url:
       #集群配置使用逗号隔开即可
      defaultZone: http://127.0.0.1:9000/eureka, http://127.0.0.1:9001/eureka

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

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

相关文章

ubuntu 显卡驱动/cuda/cudnn

显卡驱动 https://www.bilibili.com/video/BV1Zc41137tU/?spm_id_from333.999.0.0&vd_sourced75fca5b05d8be06d13cfffd2f4f7ab5 使用recommended的驱动&#xff0c;open和无open的区别在于无open更适合发挥NVIDIA显卡的全部功能和性能&#xff0c;特别是GPU加速计算等任…

K8S集群安装与部署(Linux系统)

一、环境说明&#xff1a;CentOS7、三台主机&#xff08;Master&#xff1a;10.0.0.132、Node1&#xff1a;10.0.0.133、Node2&#xff1a;10.0.0.134&#xff09; 二、准备环境&#xff1a; 映射 关闭防火墙 三、etcd集群配置 安装etcd&#xff08;Master&#xff09; [ro…

[源码分析]-xxljob(1): 整体介绍

xxljob是一种分布式的调度框架&#xff0c;所谓分布式调度&#xff0c;是指调度器和执行器不在同一个进程里&#xff0c;因此必须进行远程服务调用&#xff0c;也需要考虑高可用问题。 但是由于调度器维护的数据是落库而在各个节点间共享的&#xff0c;因此不需要考虑数据的一…

必备数据可视化工具大揭秘

探索数据的美妙世界&#xff01;我们为您带来了一份精心策划的数据可视化工具分享合集。在这个数字时代&#xff0c;数据可视化是理解和传达数据的关键&#xff0c;而这些工具将帮助您以令人惊叹的方式展现数据的潜力。 分享一&#xff1a;伙伴云 伙伴云是一个提供仪表盘和可…

vscode超炫酷的编码特效详解

1.在扩展中搜索 插件&#xff1a;Power Mode 2.在设置里搜索Code Actions On Save 3.点击在settings.json中编辑 {"powermode.enabled": true, //启动// "powermode.presets": "flames", // 火花效果 // 炸裂// "powermode.presets&quo…

织梦宏,解锁元音之谜

本篇博客会讲解力扣“2586. 统计范围内的元音字符串数”的解题思路&#xff0c;这是题目链接。 本题可以使用一个宏来判断一个字符是不是元音字母&#xff0c;接着遍历字符串数组&#xff0c;统计满足条件的字符串个数。 需要满足的条件有&#xff1a; 第一个字符是元音字母。…

微信小程序 滚动到底部加载新的数据 之后滚动到顶部

1.配置到底部监听 在app.json的window里面加入 里面的300表示距离底部300rpx触发onReachBottom事件 默认50rpx "window": {"onReachBottomDistance": 300}, 2.在数据列表的js页面 /*** 页面上拉触底事件的处理函数*/onReachBottom() {console.log("…

采用 CD4011 的温度监测自动控制电路

该电路结构简单&#xff0c;制作容易&#xff0c;由一只与非门和一只热敏电阻组成测控电路和警笛声发声电路&#xff0c;由一只继电器作为执行电路。 一、电路工作原理 电路原理如图 8 所示。 测温电阻RT接在控制门D1的输入端&#xff0c;它和电阻R1、R2及RP通过RP的分压调节…

Cesium入门之十一:认识Cesium中的Entity

目录 Entity类简介Entity在Cesium中的作用Entity的常用属性使用Entity创建点、线、面常用的Entity图形对象及其属性创建点、线、面的方法创建点创建线创建面将点、线、面添加到viewer中 修改Entity的外观和样式点&#xff08;Point&#xff09;的外观样式线&#xff08;Polylin…

蓝奥声核心技术——无线协同代理技术

1.技术背景 无线协同代理技术指基于对目标场景状态变化的协同感知而获得触发响应并进行智能决策&#xff0c;属于蓝奥声核心技术--边缘协同感知(EICS&#xff09;技术的关键支撑性技术之一。该项技术涉及物联网边缘域的无线通信技术领域&#xff0c;具体主要涉及网络服务节点与…

mysql编写sql脚本:要求表没有主键,但是想查询没有相同值的时候才进行插入

文章目录 背景说明 背景说明 我这里主要针对2处地方要进行增量执行sql&#xff1a; 1.新功能需要创建一张新表结构indicator_alarm_threshold2.给菜单表和另一个表新增数据 我们现在使用的是项目启动先初始化加载init-table.sql的脚本(这里面的轻易不动了&#xff0c;保持原…

浏览器测试的三大挑战及解决方案

目录 跨浏览器测试&#xff0c;为什么重要 跨浏览器测试挑战及其解决方案 自动化挑战大 解决方案&#xff1a;正确选择工具 设施维护负担大 解决方案&#xff1a;选择可靠的云服务 浏览器适配列表太多 解决方案&#xff1a;选择多版本支持的平台 总结&#xff1a; 随着…

关于Nuxt3.6兼容低版本游览器的实战以及可能存在的问题

当我们网站打包上线后&#xff0c;有些问题我们肯定也要考虑在内&#xff0c;兼容性也是其中一个重要的一种&#xff0c;可能会有人说&#xff0c;都2023年了&#xff0c;还在乎那些废弃的游览器干啥&#xff0c;我只能说&#xff0c;错&#xff01;大错特错&#xff01; 我们不…

docker方式安装gitlab

一&#xff1a;docker 方式安装gitlab 用docker来安装比较方便简单&#xff0c;包括版本升级也会变得更简单。 1、拉取gitlab镜像 gitlab-ce表示的是社区免费版本 docker pull gitlab/gitlab-ce:latest2、创建映射文件 mkdir -p /data/docker/gitlab/etc mkdir -p /data/do…

虚拟现实(VR)在医疗保健中的5种应用

医疗保健中的VR虚拟现实 虚拟现实的由来已久&#xff0c;18世纪&#xff0c;法国的医生使用布制的分娩模拟器向助产师和外科医生教授医学技术。在20世纪60年代初&#xff0c;医生一边对心肺复苏学员口述心肺复苏的技巧&#xff0c;一边使用一家塑料玩具厂家制造的塑料娃娃现场…

前端开发工程师的自我修养:前端开发工程师必须掌握的 Promise(详解)以及在 Vue3 项目中的实战应用

文章目录 &#x1f4cb;前言&#x1f3af;关于 promise&#xff08;用于使用 JavaScript 编写的 Windows 应用商店应用&#xff09;的内容分享&#x1f9e9;promise 究竟是什么&#xff1f;承诺关系 &#x1f3af;JavaScript Promise&#x1f9e9;认识了解 Promise &#x1f3a…

RK3568平台开发系列讲解(外设篇)HX711调试

🚀返回专栏总目录 文章目录 一、HX711 工作原理二、硬件连接三、驱动四、修改设备树五、测试沉淀、分享、成长,让自己和他人都能有所收获!😄 📢本篇我们将讲解 HX711 模块调试。 一、HX711 工作原理 该部分由应变片与 HX711 模数转换器组成。应变片上的压力变化引起应…

线程基础、线程之间的共享和协作(初篇)

什么是进程和线程&#xff1f; 进程是操作系统进行资源分配的最小单位。资源包括cpu&#xff0c;内存空间&#xff0c;磁盘io等。同一进程里的多个线程共享该进程的全部系统资源。而进程与进程之间是相互独立的。 线程是cpu调度的最小单位&#xff0c;必须依托于进程而存在。…

高斯金字塔的秘密,尺度空间证明的思考

在构建图像尺度空间的过程中&#xff0c;唯一使用的核函数是高斯核&#xff0c;这一点被T Lindeber在文献《Scale-space theory: a basic tool for analyzing structures at different scales》中证明&#xff0c;高斯核是唯一可以产生多尺度空间的核。 相信大家在使用高斯金字…

Linux多线程与fork()函数

4.1多线程中使用进程复制 #include<stdio.h> #include<stdlib.h> #include<string.h> #include<unistd.h> #include<pthread.h> void* fun(void* arg) {for(int i0;i<5;i){printf("fun run pid%d\n",getpid());sleep(1);} } int m…