205 eureka-servie-高可用与核心知识

eureka-servie-高可用

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

1 eureka-servie-高可用

在这里插入图片描述
案例:eureka-service-cluster**

pom依赖

<!--eureka服务端依赖-->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>

本地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中添加

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

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】保护机制

在这里插入图片描述

  • 30
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

THE ORDER

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

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

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

打赏作者

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

抵扣说明:

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

余额充值