Eureka服务注册与发现

news2025/8/8 6:49:52

✨ Eureka服务注册与发现

  • 微服务的注册中心
    • 注册中心的基本介绍
    • 注册中心的主要作用
    • 注册中心基本原理
    • 常见的注册中心
  • Eureka基本介绍
    • 服务治理
    • 服务注册
    • Eureka 两大组件
  • 搭建Eureka
    • Eureka端服务注册中心
      • 创建新模块 cloud-eureka-server7001
      • 添加pom依赖
      • yml
      • 配置启动类
      • 服务中心管理后台
    • 服务提供者
      • **EurekaClient端cloud-provider-payment8001将注册进EurekaServer成为服务提供者provider**
      • 模块**cloud-provider-payment8001(参照上一篇文章)**
      • 添加pom依赖
      • yml
      • 主启动类
      • 测试
    • 服务消费者
      • **EurekaClient端cloud-consumer-order80将注册进EurekaServer成为服务消费者consumer**
      • Module:cloud-consumer-order80
      • 添加pom依赖
      • yml
      • 主启动类
      • 测试
  • Eureka中的自我保护机制

📃个人主页:不断前进的皮卡丘
🌞博客描述:梦想也许遥不可及,但重要的是追梦的过程,用博客记录自己的成长,记录自己一步一步向上攀登的印记
🔥个人专栏:微服务专栏

微服务的注册中心

注册中心的基本介绍

注册中心可以说是微服务架构中的"通讯录",它记录了服务和服务之间地址的映射关系。在分布式架构中, 服务会注册到这里(注册中心),当服务需要调用其它服务时,就这里找到服务的地址,进行调用。

注册中心的主要作用

服务
注册中心(下称注册中心)是微服务架构非常重要的一个组件,在微服务架构里主要起到了协调者的一个作用。注册中心一般包含如下几个功能:

  1. 服务发现:
    服务注册/反注册:保存服务提供者和服务调用者的信息
    服务订阅/取消订阅:服务调用者订阅服务提供者的信息,最好有实时推送的功能
    服务路由(可选):具有筛选整合服务提供者的能力。
  2. 服务配置:
    配置订阅:服务提供者和服务调用者订阅微服务相关的配置
    配置下发:主动将配置推送给服务提供者和服务调用者
  3. 服务健康检测
    检测服务提供者的健康情况

注册中心基本原理

微服务模式-注册中心详解

常见的注册中心

  • Zookeeper
    zookeeper它是一个分布式服务框架,是Apache Hadoop 的一个子项目,它主要是用来解决分布式应
    用中经常遇到的一些数据管理问题,如:统一命名服务、状态同步服务、集群管理、分布式应用配置项
    的管理等。简单来说zookeeper=文件系统+监听通知机制。
  • Eureka
    Eureka是在Java语言上,基于Restful Api开发的服务注册与发现组件,Springcloud Netflflix中的重要组
  • Consul
    Consul是由HashiCorp基于Go语言开发的支持多数据中心分布式高可用的服务发布和注册服务软件,
    采用Raft算法保证服务的一致性,且支持健康检查。
  • Nacos
    Nacos是一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。简单来说 Nacos 就是
    注册中心 + 配置中心的组合,提供简单易用的特性集,帮助我们解决微服务开发必会涉及到的服务注册
    与发现,服务配置,服务管理等问题。Nacos 还是 Spring Cloud Alibaba 组件之一,负责服务注册与发现
    最后我们通过一张表格大致了解Eureka、Consul、Zookeeper的异同点。选择什么类型的服务注册与
    发现组件可以根据自身项目要求决定。
    在这里插入图片描述

Eureka基本介绍

服务治理

到底什么是服务治理?
SpringCloud封装了Netflix公司开发的Eureka模块来实现服务治理。
在传统的RPC远程调用框架中,管理每个服务与服务之间依赖关系比较复杂、所以需要进行服务治理,管理服务与服务之间依赖关联,以实现服务调用,负载均衡、容错等,实现服务发现与注册。

服务注册

Eureka采用了CS的设计架构,Eureka Server作为服务注册功能的服务器,它是服务注册中心。
而系统中的其他微服务,使用Eureka的客户端连接到Eureka Server并维持心跳连接。这样系统的维护人员可以通过Eureka Server来监控系统中各个微服务是否正常运行。
在服务注册与发现中,有一个注册中心。当服务器启动的时候,会把当前自己服务器的信息,比如:服务通讯地址等以别名方式注册到注册中心上。
另一方(消费者服务),以该别名的方式去注册中心上获取到实际的服务通讯地址,然后,再实现本地RPC远程调用。
RPC远程调用框架核心设计思想在于注册中心,因为使用注册中心管理每个服务与服务之间的一个依赖关系(服务治理概念)。
在任何RPC远程框架中,都会有一个注册中心(存放服务地址相关信息(接口地址))。
在这里插入图片描述

在这里插入图片描述

Eureka 两大组件

Eureka 采用 CS(Client/Server,客户端/服务器) 架构,它包括以下两大组件:

  • Eureka Server:Eureka 服务注册中心,主要用于提供服务注册功能。当微服务启动时,会将自己的服务注册到 Eureka Server。Eureka Server 维护了一个可用服务列表存储了所有注册到 Eureka Server 的可用服务的信息,这些可用服务可以在 Eureka Server 的管理界面中直观看到。
  • Eureka Client:Eureka 客户端,通常指的是微服务系统中各个微服务,主要用于和 Eureka Server 进行交互。客户端同时也具备一个内置的、使用轮询(round-robin)负载算法的负载均衡器。在微服务应用启动后,Eureka Client 会向 Eureka Server 发送心跳(默认周期为 30 秒)。若 Eureka Server 在多个心跳周期内没有接收到某个 Eureka Client 的心跳,Eureka Server 将它从可用服务列表中移除(默认 90 秒)。

注:“心跳”指的是一段定时发送的自定义信息,让对方知道自己“存活”,以确保连接的有效性。大部分 CS 架构的应用程序都采用了心跳机制,服务端和客户端都可以发心跳。通常情况下是客户端向服务器端发送心跳包,服务端用于判断客户端是否在线。

搭建Eureka

Eureka端服务注册中心

创建新模块 cloud-eureka-server7001

在这里插入图片描述

添加pom依赖

 <dependencies>
         <!--Eureka服务注册中心依赖-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
        </dependency>
 		<!--之前创建的公共模块的坐标,需要改成你们自己的pom坐标-->
        <dependency>
            <groupId>com.zyh.springcloud</groupId>
            <artifactId>cloud-api-commons</artifactId>
            <version>${project.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <scope>runtime</scope>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
        </dependency>
    </dependencies>

yml

  • registerWithEureka: 是否将自己注册到Eureka服务中,本身就是所有无需注册
  • fetchRegistry : 是否从Eureka中获取注册信息
  • serviceUrlEureka: 客户端与Eureka服务端进行交互的地址
server:
  port: 7001

eureka:
  instance:
    hostname: localhost

  client:
    register-with-eureka: false
    fetchRegistry: false
    service-url:
      defaultZone: http://localhost:7001/eureka

配置启动类

EnableEurekaServer : 激活Eureka Server端配置
在这里插入图片描述

服务中心管理后台

启动服务,然后输入网址http://localhost:7001/
在这里插入图片描述

服务提供者

EurekaClient端cloud-provider-payment8001将注册进EurekaServer成为服务提供者provider

模块cloud-provider-payment8001(参照上一篇文章)

添加pom依赖

 <!--当前8001作为Eureka的客户端,向7001进行注册-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
        </dependency>

yml

server:
  port: 8001

spring:
  application:
    name: cloud-payment-service
  datasource:
    type: com.alibaba.druid.pool.DruidDataSource
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3306/cloud2022?serverTimezone=Asia/Shanghai&useSSL=true&useUnicode=true&characterEncoding=UTF-8
    username: root
    password: 123456

mybatis:
  mapperLocations: classpath:/mapper/*.xml
  type-aliases-package: com.zyh.springcloud.entities
#新增的  
eureka:
  client:
    register-with-eureka: true
    fetchRegistry: true
    service-url:
      defaultZone: http://localhost:7001/eureka

主启动类

添加注解@EnableEurekaClient
在这里插入图片描述

测试

我们先启动Eureka,然后再启动这个模块
http://localhost:7001/
在这里插入图片描述

服务消费者

EurekaClient端cloud-consumer-order80将注册进EurekaServer成为服务消费者consumer

Module:cloud-consumer-order80

添加pom依赖

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

yml

server:
  port: 80
spring:
  application:
    name: cloud-consumer-order80

eureka:
  client:
    register-with-eureka: true
    fetchRegistry: true
    service-url:
      defaultZone: http://localhost:7001/eureka

主启动类

在这里插入图片描述

测试

  1. 先要启动EurekaServer,7001服务
  2. 再要启动服务提供者8001服务和服务消费者80服务
  3. eureka服务器
    在这里插入图片描述

通过postman来测试一下
在这里插入图片描述

在这里插入图片描述

Eureka中的自我保护机制

微服务第一次注册成功之后,每30秒会发送一次心跳将服务的实例信息注册到注册中心。通知 Eureka
Server 该实例仍然存在。如果超过90秒没有发送更新,则服务器将从注册信息中将此服务移除。
Eureka Server在运行期间,会统计心跳失败的比例在15分钟之内是否低于85%,如果出现低于的情况
(在单机调试的时候很容易满足,实际在生产环境上通常是由于网络不稳定导致),Eureka Server会
将当前的实例注册信息保护起来,同时提示这个警告。保护模式主要用于一组客户端和Eureka Server
之间存在网络分区场景下的保护。一旦进入保护模式,Eureka Server将会尝试保护其服务注册表中的
信息,不再删除服务注册表中的数据(也就是不会注销任何微服务)
验证完自我保护机制开启后,并不会马上呈现到web上,而是默认需等待 5 分钟(可以通过
eureka.server.wait-time-in-ms-when-sync-empty 配置),即 5 分钟后你会看到下面的提示信息:
在这里插入图片描述

关闭自我保护
通过设置 eureka.enableSelfPreservation=false 来关闭自我保护功能。

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

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

相关文章

Connection(数据库连接对象)

Connection&#xff08;数据库连接对象&#xff09; 简介&#xff1a;通过代码来讲解Connection的含义。 推荐学习路线&#xff1a;JDBC数据库的连接->Connection&#xff08;数据库连接对象&#xff09;->Statement->ResultSet->通过PreparedStatement预防SQL注入…

【云原生 | Kubernetes 系列】--Gitops持续交付 Argo Rollouts Analysis

1. Argo Rollouts 由一个控制器和一组CRD组成,可为K8s提供高级部署功能 - blue-green - canary - canary analysis 结合外部指标系统金丝雀 - experimentation 实验性的结果 - progressive delivery 渐进式交付,精准管控外部流量策略,不用关心后端部署机制支持Ingress Contro…

第六章《类的高级特性》第1节:static关键字的使用

static意为“静态”,在Java语言中,使用static关键字可以定义静态属性、静态方法和静态块。 6.1.1 静态属性 在第5章中,我们定义了一个Person类的子类Student,用它来表示学生。假如每一个在读学生每年都能得到1000元的助学津贴,并且程序员希望在Student类中以属性的形式把…

骨传导有没有副作用?骨传导耳机有什么优点吗?

骨传导有没有副作用&#xff1f; 先说结论&#xff1a;是没有的。 骨传导耳机虽然是近两年在走向我们大众视野&#xff0c;但是骨传导技术早就已经在医疗、军事领域广泛应用&#xff0c;骨传导也不是什么高端的技术&#xff0c;像我们平常嗑瓜子&#xff0c;吃薯片&#xff0…

javaee实验,SSM整合开发综合实例

由于不能使用maven管理&#xff0c;只能导入jar包做实验&#xff0c;最下面有截图展示所用到的jar包&#xff0c;可以自己搜索文档maven导入依赖&#xff1b; SSM整合开发综合实例 实验目的&#xff1a; &#xff08;1&#xff09;掌握SSM项目整合的原则&#xff1b; &#x…

Microsoft Visual Studio C++开发环境的配置及使用

Microsoft Visual Studio C开发环境的配置及使用 本文引用自作者编写的下述图书; 本文允许以个人学习、教学等目的引用、讲授或转载&#xff0c;但需要注明原作者"海洋饼干叔 叔"&#xff1b;本文不允许以纸质及电子出版为目的进行抄摘或改编。 1.《Python编程基础及…

大数据面试题(四):Yarn核心高频面试题

文章目录 Yarn核心高频面试题 一、简述Hadoop1与Hadoop2的架构异同 二、为什么会产生yarn&#xff0c;它解决了什么问题&#xff0c;有什么优势&#xff1f; 三、HDFS的数据压缩算法&#xff1f;及每种算法的应用场景&#xff1f; 1、gzip压缩 2、Bzip2压缩 3、Lzo压缩 …

SpringBoot框架接收参数的六种常用方式(全面详细)

文章目录[toc]一、基于PathVariable注解二、基于RequestParam注解三、基于PathVariableRequestParam混合四、基于RequestBody注解五、基于HttpServletRequest请求六、不基于任何注解进行表单传参一、基于PathVariable注解 RestControllerpublic class UserController {GetMapp…

C#11新特性之原始字符串

随着.NET 7与C#11的发布&#xff0c;微软发布了C# 11 中的原始字符串这个新特性。 这个新特性解决了祖传字符串中引号的问题。 微软官方的表述是:" Raw string literals"&#xff0c;圈里都叫他”原始字符串”。从字面不难看出&#xff0c;它是适用于字符串的新特性…

elasticsearch 之 histogram 直方图聚合

1. 简介 直方图聚合是一种基于多桶值聚合&#xff0c;可从文档中提取的数值或数值范围值来进行聚合。它可以对参与聚合的值来动态的生成固定大小的桶。 2. bucket_key如何计算 假设我们有一个值是32&#xff0c;并且桶的大小是5&#xff0c;那么32四舍五入后变成30&#xff…

两种方式实现css取消页面鼠标双击选中文字或单击拖动选中文字的效果

问题描述 我们知道浏览器页面上的文字正常情况下我们是可以双击选中、或者单击鼠标横向拖动也能选中的&#xff0c;选中以后可以右击出现面板然后去复制什么的。但是有的时候&#xff0c;这种效果我们并不想要的&#xff0c;比如用户点快了的时候&#xff0c;所以我们需要禁用…

TensorFlow之文本分类算法-3

1 前言 2 收集数据 3 探索数据 4 选择模型 5 准备数据 N-gram向量集 序列向量集 序列向量集主要是用于序列模型中对文本执行分词与向量化&#xff0c;与n-gram向量集类似&#xff0c;也使用特征选择与标准化的技术优化序列向量集的表示。 在一些文本样例中&#xff0c;…

GaussDB-物理、逻辑备份 使用方法和[GAUSS-53403]解决办法

文章目录1.逻辑备份-gs_dump2.逻辑备份恢复数据库3.物理备份&#xff08;分布式集群验证&#xff09;查看物理全量备份集&#xff1a;查看物理增量备份集&#xff1a;查看所有备份集&#xff08;该命令无法确定备份是否有效&#xff09;停止物理备份&#xff1a;使用物理备份集…

centos7安装mysql8.0.31

mysql 官网 https://www.mysql.com/ 找到对应的版本 然后下载 连接虚拟机 mysql 会和 mariadb这个有冲突&#xff0c;需要卸载掉 查看是否有mariadb rpm -qa|grep mariadb rpm -e --nodeps mariadb-libs 这个是强制卸载命令 再查看一下 rpm -qa|grep mariadb 在根目录创建…

2022 APMCM亚太数学建模竞赛 C题 全球是否变暖 问题一python代码实现(更新完毕)

2022 APMCM亚太数学建模竞赛 C题 全球是否变暖 思路及代码实现(持续更新完毕) 更新信息 2022-11-24 10:00 更新问题1和问题2 思路 2022-11-24 23:20 更新问题一代码 2022-11-25 11:00 更新问题二代码 相关链接 【2022 APMCM亚太数学建模竞赛 C题 全球是否变暖 问题一pytho…

高性能数据访问中间件 OBProxy(六):一文讲透数据路由

在《高性能数据访问中间件 OBProxy&#xff08;五&#xff09;&#xff1a;一文讲透数据路由》中&#xff0c;我们讲到了数据路由影响因素包括功能因素、性能因素和高可用因素。本文主要介绍高可用因素相关的内容。 相比传统的 IOE 架构&#xff0c;OceanBase 利用更低的成本实…

【你不知道的javascript上】2. 第三章 全局作用域,函数作用域和块作用域,立即执行函数

预警&#xff1a;【你不知道的javascript】开头的文章&#xff0c;是用来总结书籍《你不知道的Javascript》中我不熟悉的知识&#xff0c;单纯的用来巩固学到的知识&#xff0c;和加深记忆。 可能有些地方我理解的不透彻&#xff0c;所以不能够保证内容的正确性&#xff0c;欢迎…

使用Mysqldump进行定时全备和增备脚本

使用mysqldump进行全备&#xff0c;增备是备份binlog日志 对应的一些变量按照实际环境进行修改即可&#xff0c;如果有更好的思路也可以进行评论交流。 配合计划任务即可完成定时备份的需求&#xff0c;脚本中备份文件存放目录提前创建或者在加个判断进行创建不过我觉得没啥必…

UNIAPP实战项目笔记44 订单页面顶部选项卡 有数据页面样式布局和无数据页面样式布局

UNIAPP实战项目笔记44 订单页面顶部选项卡 有数据页面样式布局和无数据页面样式布局 订单页面顶部选项卡 具体内容图片自己替换哈&#xff0c;随便找了个图片的做示例 具体位置见目录结构 通过 v-show 的false 和 true来切换有无数据页面布局 代码 my-order.vue 页面部分 my-…

[附源码]java毕业设计医院挂号管理系统

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…