-
首先我们需要构建一个空项目
-
新建一个名为parent 的Module Maven项目,管理SpringCloud的版本、SpringBoot的版本
spring-boot-starter-parent org.springframework.boot 2.4.1 2020.0.0 org.springframework.cloud spring-cloud-dependencies ${spring.cloud-version} pom import
-
首先构建一个module,maven项目,父项目指定为上面创建的parent
-
引入依赖:web依赖和eureka依赖
org.springframework.boot spring-boot-starter-web org.springframework.cloud spring-cloud-starter-netflix-eureka-server 这里我出现了一个问题,我没仔细看,引了一个spring-cloud-netflix-eureka-server。有这个东西也引了进来,但是就是启动报错,应该是spring-cloud-starter-netflix-eureka-server。花了挺长时间去找原因,也有了一些额外收获,确定启动类没写错之后便怀疑是eureka依赖的问题,上springcloud官网看了一下2020版的是移除了spring-cloud-netflix依赖中的很多依赖:如图
这也算是标志着这些组件的淘汰吧。。。。
-
创建启动类
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); } } -
修改配置
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客户端大体和上面一致
-
依赖:
org.springframework.boot spring-boot-starter-web org.springframework.cloud spring-cloud-starter-netflix-eureka-client -
启动类:
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); } } -
配置:
server.port=8083 spring.application.name=EurekaClient eureka.client.service-url.defaultZone=http://localhost:8761/eureka
ok,以上eureka客户端、服务端就写好了。跑起来:localhost:8761/
4.Eureka自我保护机制就是一个客户端和服务端中断,Eureka服务端并不会立即将这个服务清除掉。靠的是心跳机制
❓ 什么时候将它清除呢:
首先在一定时间内(15分钟)统计心跳失败次数,如果成功比例>15%,Eureka就会将它保护起来不会被清除掉
所以有两种方式让它快速清除:
- 服务端关闭保护机制(极不推荐)
//关闭自我保护 eureka.server.enable-self-preservation=false //超时3s清除 eureka.server.eviction-interval-timer-in-ms=3000
- 让心跳周期缩短,心跳频率变高
//小周期时长,默认90 eureka.instance.lease-expiration-duration-in-seconds=20 //多久心跳一次,默认30 eureka.instance.lease-renewal-interval-in-seconds=10
❓为啥叫小周期呢,因为大周期还是15分钟,小周期相当于一组,
指定小周期、频率后,就能计算出15分钟会发多少次心跳。缩短小周期和频率是为了更快达到失败比例,从而清除服务
5.Eureka服务端集群首先要启动多个Eureka服务端,超简单实用的方法:
复制就行了,但是我们需要该端口号:
修改jvm参数即可指定端口号
有了服务端集群后,我们只需要在客户端的配置文件中的服务端地址:都加上就行了



