eureka-servie-高可用

1 eureka-servie-高可用2 eureka-client注册3 核心知识点【3.1】服务注册【3.2】服务续约【3.3】服务剔除【3.4】保护机制

1 eureka-servie-高可用

案例:eureka-service-cluster**

pom依赖:

org.springframework.cloud

spring-cloud-starter-netflix-eureka-server

本地hostnam

打开C:\Windows\System32\drivers\etc,编辑hosts

127.0.0.1 eureka1

127.0.0.1 eureka2

application.yml文件:

spring:

profiles:

active: 8082 #启动不同项目的时候手动切换

application-8081.yml

这里把eureka1注册eureka2

server:

port: 8081

eureka:

instance:

hostname: eureka1

#默认:90s

#标识eureka server至上一次收到client的心跳之后,等待下一次心跳的超时时间,

#太大:可能将流量转发过去的时候,该instance已经不存活了

#太小:instance则很可能因为临时的网络抖动而被摘除掉

lease-expiration-duration-in-seconds: 45

#默认:30s

#表示eureka client发送心跳给server端的频率

lease-renewal-interval-in-seconds: 15

client:

#要不要去注册中心获取其他服务的地址

fetch-registry: false

#自己就是注册中心,不用注册自己

register-with-eureka: false

#服务地址

service-url:

# 多个地址使用","分割,

defaultZone: http://eureka2:8082/eureka/

server:

# 指定每分钟需要收到的续约次数的阈值,默认值就是:0.85

renewal-percent-threshold: 0.8

#enable-self-preservation: false

#续期时间,即扫描失效服务的间隔时间(缺省为60*1000ms)

eviction-interval-timer-in-ms: 30000

application-8082.yml

这里把eureka2注册eureka1

server:

port: 8082

eureka:

instance:

hostname: eureka2

#默认:90s

#标识eureka server至上一次收到client的心跳之后,等待下一次心跳的超时时间,

#太大:可能将流量转发过去的时候,该instance已经不存活了

#太小:instance则很可能因为临时的网络抖动而被摘除掉

lease-expiration-duration-in-seconds: 45

#默认:30s

#表示eureka client发送心跳给server端的频率

lease-renewal-interval-in-seconds: 15

client:

#要不要去注册中心获取其他服务的地址

fetch-registry: false

#自己就是注册中心,不用注册自己

register-with-eureka: false

#服务地址

service-url:

# 多个地址使用","分割

defaultZone: http://eureka1:8081/eureka/

server:

# 指定每分钟需要收到的续约次数的阈值,默认值就是:0.85

renewal-percent-threshold: 0.8

#enable-self-preservation: false

#续期时间,即扫描失效服务的间隔时间(缺省为60*1000ms)

eviction-interval-timer-in-ms: 30000

启动配置:

package com.it.springcloud;

import org.springframework.boot.SpringApplication;

import org.springframework.boot.autoconfigure.SpringBootApplication;

import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;

/**

* @ClassName EurekaServerStart.java

* @Description eureka服务端启动类

*/

@SpringBootApplication

//启动服务端

@EnableEurekaServer

public class EurekaClusterServerStart {

public static void main(String[] args) {

SpringApplication.run(EurekaClusterServerStart.class);

}

}

访问http://127.0.0.1:8081/,发下DS中有个eureka2

2 eureka-client注册

​ 以module-user-service模块为例,把它注册到高可用eureka集群中,让他提供user的服务

pom依赖

module-user-service的pom中添加

org.springframework.cloud

spring-cloud-starter-netflix-eureka-client

application.yml

module-user-service的application.yml中添加:

#注册中心

eureka:

client:

service-url:

#这里会把模块注入到eureka1,eureka2

defaultZone: http://eureka2:8082/eureka/,http://eureka1:8081/eureka/

#表示eureka client间隔多久去拉取服务注册信息,默认为30秒,

#对于api-gateway,如果要迅速获取服务注册状态,可以缩小该值,比如5秒

registry-fetch-interval-seconds: 15

启动配置

package com.it.springcloud;

import lombok.extern.slf4j.Slf4j;

import org.springframework.boot.SpringApplication;

import org.springframework.boot.autoconfigure.SpringBootApplication;

import org.springframework.cloud.netflix.eureka.EnableEurekaClient;

@SpringBootApplication

@Slf4j

//开启eureka的服务端

@EnableEurekaClient

public class UserServiceStart {

public static void main(String[] args) {

SpringApplication.run(UserServiceStart.class, args);

}

}

3 核心知识点

【3.1】服务注册

服务提供者、服务消费者、启动后都会向注册中心注册服务(如果配置了注册)。下图是介绍如何完成服务注册的: 注册中心【eureka-service】服务接收到 register 请求后:

保存服务信息,将服务信息保存到 registry 中;

更新队列,将此事件添加到更新队列中,供 Eureka Client 增量同步服务信息使用。

清空二级缓存,即 readWriteCacheMap,用于保证数据的一致性,将此事件同步至其他的 Eureka Server 节点。

相关配置

#注册中心

eureka:

client:

service-url:

defaultZone: http://eureka2:8082/eureka/,http://eureka1:8081/eureka/

#表示eureka client间隔多久去拉取服务注册信息,默认为30秒,

#对于api-gateway,如果要迅速获取服务注册状态,可以缩小该值,比如5秒

registry-fetch-interval-seconds: 15

【3.2】服务续约

服务注册后,要定时(默认 30S,可自己配置)向注册中心发送续约请求,告诉注册中心“我还活着”。

注册中心收到续约请求后:

更新服务对象的最近续约时间,即 Lease 对象的 lastUpdateTimestamp【0->45】

同步服务信息,将此事件同步至其他的 Eureka Server 节点。

剔除服务之前会先判断服务是否已经过期,判断服务是否过期的条件之一是续约时间和当前时间的差值是不是大于阈值。

相关配置

eureka:

instance:

hostname: eureka1

#默认:90s

#标识eureka server至上一次收到client的心跳之后,等待下一次心跳的超时时间,

#太大:可能将流量转发过去的时候,该instance已经不存活了

#太小:instance则很可能因为临时的网络抖动而被摘除掉

lease-expiration-duration-in-seconds: 45

#默认:30s

#表示eureka client发送心跳给server端的频率

lease-renewal-interval-in-seconds: 15

【3.3】服务剔除

Eureka Server 提供了服务剔除的机制,用于剔除没有正常下线的服务。

服务正常停止之前会向注册中心发送注销请求,告诉注册中心“我要下线了”。

注册中心服务接收到 cancel 请求后:

删除服务信息,将服务信息从 registry 注册表中删除;

更新队列,将此事件添加到更新队列中,供 Eureka Client 增量同步服务信息使用。

清空二级缓存,即 readWriteCacheMap,用于保证数据的一致性。

更新阈值,供剔除服务使用。

同步服务信息,将此事件同步至其他的 Eureka Server 节点。

服务正常停止才会发送 Cancel,如果是非正常停止,则不会发送,此服务由 Eureka Server 主动剔除。

eureka:

server:

# 指定每分钟需要收到的续约次数的阈值,默认值就是:0.85

renewal-percent-threshold: 0.8

#enable-self-preservation: false

#续期时间,即扫描失效服务的间隔时间(缺省为60*1000ms)

eviction-interval-timer-in-ms: 30000

【3.4】保护机制

参考文章

评论可见,请评论后查看内容,谢谢!!!
 您阅读本篇文章共花了: