再学--Eureka

1.准备工作

  1. 首先我们需要构建一个空项目

  2. 新建一个名为parent 的Module Maven项目,管理SpringCloud的版本、SpringBoot的版本

    	<!--springboot作为parent-->
        <parent>
            <artifactId>spring-boot-starter-parent</artifactId>
            <groupId>org.springframework.boot</groupId>
            <version>2.4.1</version>
        </parent>
    
        <properties>
            <spring.cloud-version>2020.0.0</spring.cloud-version>
        </properties>
        <dependencyManagement>
            <!--维护springcloud版本-->
            <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>
    

2.Eureka服务端

  1. 首先构建一个module,maven项目,父项目指定为上面创建的parent

  2. 引入依赖:web依赖和eureka依赖

    <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-server</artifactId>
            </dependency>
        </dependencies>
    

    这里我出现了一个问题,我没仔细看,引了一个spring-cloud-netflix-eureka-server。有这个东西也引了进来,但是就是启动报错,应该是spring-cloud-starter-netflix-eureka-server。花了挺长时间去找原因,也有了一些额外收获,确定启动类没写错之后便怀疑是eureka依赖的问题,上springcloud官网看了一下2020版的是移除了spring-cloud-netflix依赖中的很多依赖:如图

    image-20211005110918146

这也算是标志着这些组件的淘汰吧。。。。

  1. 创建启动类

    package com.xp;
    
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;
    
    @SpringBootApplication
    @EnableEurekaServer   //作为EurekaServer启动
    public class EurekaApplication {
        public static void main(String[] args) {
            SpringApplication.run(EurekaApplication.class,args);
        }
    }
    
  2. 修改配置

server.port=8761

//应用名,特别重要
spring.application.name=Eureka

//设置Eureka客户端向哪里注册,现在是服务端,可以不用写这个
eureka.client.service-url.defaultZone=http://localhost:8761/eureka

//关闭Eureka客户端注册
eureka.client.register-with-eureka=false

//关闭Eureka从服务端拉去注册信息
eureka.client.fetch-registry=false

🀄️ 说明:因为eureka的server依赖会同时把client依赖也引进来,所以启动的时候会以客户端、服务端两个身份去注册,所以作为服务端启动时应该禁止自己作为客户端注册。

🀄️ 同理作为服务端应该禁止启动的时候去注册中心拉取注册信息,因为那时候都还没有服务端

3.Eureka客户端

大体和上面一致

  1. 依赖:

    <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>
    
  2. 启动类:

    package com.xp;
    
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
    
    @SpringBootApplication
    @EnableEurekaClient
    public class EurekaClientApplication {
        public static void main(String[] args) {
            SpringApplication.run(EurekaClientApplication.class,args);
        }
    }
    
  3. 配置:

    server.port=8083
    spring.application.name=EurekaClient
    eureka.client.service-url.defaultZone=http://localhost:8761/eureka
    

ok,以上eureka客户端、服务端就写好了。跑起来:localhost:8761/

image-20211005130740960

4.Eureka自我保护机制

就是一个客户端和服务端中断,Eureka服务端并不会立即将这个服务清除掉。靠的是心跳机制

❓ 什么时候将它清除呢:

​ 首先在一定时间内(15分钟)统计心跳失败次数,如果成功比例>15%,Eureka就会将它保护起来不会被清除掉

所以有两种方式让它快速清除:

  1. 服务端关闭保护机制(极不推荐)
//关闭自我保护
eureka.server.enable-self-preservation=false
//超时3s清除
eureka.server.eviction-interval-timer-in-ms=3000
  1. 让心跳周期缩短,心跳频率变高
//小周期时长,默认90
eureka.instance.lease-expiration-duration-in-seconds=20
//多久心跳一次,默认30
eureka.instance.lease-renewal-interval-in-seconds=10

❓为啥叫小周期呢,因为大周期还是15分钟,小周期相当于一组,

指定小周期、频率后,就能计算出15分钟会发多少次心跳。缩短小周期和频率是为了更快达到失败比例,从而清除服务

5.Eureka服务端集群

首先要启动多个Eureka服务端,超简单实用的方法:

image-20211005140137097

image-20211005140245020

复制就行了,但是我们需要该端口号:

image-20211005140405302

修改jvm参数即可指定端口号

有了服务端集群后,我们只需要在客户端的配置文件中的服务端地址:都加上就行了

image-20211005140556441

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

为了我的架构师

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值