03 Eureka

1. 简介

​ Eureka是一个基于REST的服务,主要用于服务的注册和发现,以达到负载均衡和中间层服务故障转移的目的。

​ 作用与zookeeper类似,都可以作为服务注册中心

2. 体系结构

在这里插入图片描述

​ 执行流程:

  1. 服务提供者在启动时,向注册中心注册自己提供的服务
  2. 服务消费者在启动时,向注册中心订阅自己所需的服务
  3. 注册中心返回服务提供者地址给消费者
  4. 服务消费者从提供者地址中调用消费者

​ 两个组件:

  • Eureka Server 服务端

    指的是服务注册中心,提供服务的注册和发现

    注册中心会存储所有可用服务节点的信息,服务节点的信息可以在界面中直观的看到

  • Euraka Client 客户端

    指的是服务提供者和消费者,在应用程序启动时会和服务端进行交互,注册或订阅服务

3. 搭建服务注册中心

​ 步骤:

  1. 创建项目,勾选Eureka Server

  2. 编辑pom.xml文件,配置依赖

     <parent>
     	<groupId>org.springframework.boot</groupId>
     	<artifactId>spring-boot-starter-parent</artifactId>
     	<version>2.3.4.RELEASE</version>
     	<relativePath/> <!-- lookup parent from repository -->
     	<!-- https://start.spring.io/actuator/info -->
     </parent>
     <groupId>com.example</groupId>
     <artifactId>spring-cloud-eureka</artifactId>
     <version>0.0.1-SNAPSHOT</version>
     <name>spring-cloud-eureka</name>
     <description>Demo project for Spring Boot</description>
     <properties>
     	<java.version>1.8</java.version>
     	<spring-cloud.version>Hoxton.SR12</spring-cloud.version>
     </properties>
     <dependencies>
     	<dependency>
     		<groupId>org.springframework.cloud</groupId>
     		<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
     	</dependency>
    
     </dependencies>
     <dependencyManagement>
     	<dependencies>
     		<dependency>
     			<groupId>org.springframework.cloud</groupId>
     			<artifactId>spring-cloud-dependencies</artifactId>
     			<version>${spring-cloud.version}</version>
     			<type>pom</type>
     			<scope>import</scope>
     		</dependency>
     	</dependencies>
     </dependencyManagement>
    
     <build>
     	<plugins>
     		<plugin>
     			<groupId>org.springframework.boot</groupId>
     			<artifactId>spring-boot-maven-plugin</artifactId>
     		</plugin>
     	</plugins>
     </build>
    
    
  3. 编辑application.yml文件,配置eureka

server:
  port: 7001


eureka:
  client:
    # 是否将自己注册到Eureka-Server中,默认的为true
    register-with-eureka: false
    # 是否从Eureka-Server中获取服务提供者的注册信息,默认为true
    fetch-registry: false
    # 设置服务注册中心的地址
    service-url:
      defaultZone: http://localhost:${server.port}/eureka/

Spring Cloud Eureka 常用配置及说明

  1. 编辑启动类,启用Eureka服务器

    @SpringBootApplication
    @EnableEurekaServer // 启用Eureka服务器
    public class CloudEureka7001Application {
    	public static void main(String[] args) {
    		SpringApplication.run(CloudEureka7001Application.class, args);
    	}
    }
    
  2. 访问Eureka-Server服务管理平台

    通过浏览器访问localhost:7001

4. 注册服务

​ 步骤:

  1. 编辑pom.xml文件,配置Eureka-Client依赖

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

    注:如果是新建项目,可以勾选Eureka Discovery Client

  2. 编辑application.yml文件,配置eureka

    server:
      port: 8001
    
    spring:
      application:
        # 应用名,在注册中心显示的服务名
        name: user-provider
        
    eureka:
      client:
        # 指定服务注册中心的地址
        service-url:
          defaultZone: http://localhost:7001/eureka/
    
  3. 编辑启动类,启用Eureka客户端

    @SpringBootApplication
    @EnableEurekaClient // 启用Eureka客户端
    public class CloudProvider8001Application {
        public static void main(String[] args) {
            SpringApplication.run(CloudProvider8001Application.class, args);
        }
    }
    

5. 自我保护机制

​ 在某个时刻,如果某个服务不可用了,Eureka不会立即的清理该服务, 依旧会对该服务的信息进行保存

默认情况下,微服务在Eureka上注册后,会每30秒发送心跳包,Eureka通过心跳来判断服务是否健康,如果Eureka的Server在一定时间内(默认90s),没有接收到某个微服务实例的心跳,将会注销该实例。

但是当网络发生故障时,通常会导致Eureka Server在短时间内无法收到大批微服务的心跳,但微服务自身是正常的,只是网络通信出现了故障。

考虑到这种情况,Eureka设置了一个阀值,当心跳失败的比例在15分钟之内低于85%时,Eureka Server认为很大程度上出现了网络故障,将不再删除心跳过期的微服务,尽可能的保护这些注册信息,自动进入 自我保护模式。

当网络故障被解决时,服务将自动退出 自我保护模式

​ 可以关闭自我保护机制 eureka.server.enable-self-preservation=false

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值