文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Eureka服务注册与发现

2023-08-25 12:46

关注

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

微服务的注册中心

注册中心的基本介绍

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

注册中心的主要作用

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

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

注册中心基本原理

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

常见的注册中心

Eureka基本介绍

服务治理

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

服务注册

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

在这里插入图片描述

Eureka 两大组件

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

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

搭建Eureka

Eureka端服务注册中心

创建新模块 cloud-eureka-server7001

在这里插入图片描述

添加pom依赖

 <dependencies>                 <dependency>            <groupId>org.springframework.cloudgroupId>            <artifactId>spring-cloud-starter-netflix-eureka-serverartifactId>        dependency>         <dependency>            <groupId>com.zyh.springcloudgroupId>            <artifactId>cloud-api-commonsartifactId>            <version>${project.version}version>        dependency>        <dependency>            <groupId>org.springframework.bootgroupId>            <artifactId>spring-boot-starter-webartifactId>        dependency>        <dependency>            <groupId>org.springframework.bootgroupId>            <artifactId>spring-boot-starter-actuatorartifactId>        dependency>        <dependency>            <groupId>org.springframework.bootgroupId>            <artifactId>spring-boot-devtoolsartifactId>            <scope>runtimescope>            <optional>trueoptional>        dependency>        <dependency>            <groupId>org.projectlombokgroupId>            <artifactId>lombokartifactId>        dependency>        <dependency>            <groupId>org.springframework.bootgroupId>            <artifactId>spring-boot-starter-testartifactId>            <scope>testscope>        dependency>        <dependency>            <groupId>junitgroupId>            <artifactId>junitartifactId>        dependency>    dependencies>

yml

server:  port: 7001eureka:  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: 8001spring:  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: 123456mybatis:  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.cloudgroupId><artifactId>spring-cloud-starter-netflix-eureka-clientartifactId>dependency>

yml

server:  port: 80spring:  application:    name: cloud-consumer-order80eureka:  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 来关闭自我保护功能。

来源地址:https://blog.csdn.net/qq_52797170/article/details/127684278

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯