• Eureka细节详解


    1、Eureka元数据详解

    Eureka的元数据有两种:标准元数据自定义元数据

            标准元数据:主机名、IP地址、端口号等信息,这些信息都会被发布在服务注册表中,用于服务之间的调用。

            自定义元数据:可以使用eureka.instance.metadata-map配置,符合KEY/VALUE的存储格式。这 些元数据可以在远程客户端中访问。

    类似于

    eureka:

            instance:
                    prefer-ip-address: true
                    metadata-map:

                    # 自定义元数据(kv自定义)
                            cluster: cl1
                            region: rn1

    我们可以在程序中可以使用DiscoveryClient 获取指定微服务的所有元数据信息

    1. import com.lagou.edu.AutoDeliverApplication;
    2. import org.junit.Test;
    3. import org.junit.runner.RunWith;
    4. import org.springframework.beans.factory.annotation.Autowired;
    5. import org.springframework.boot.test.context.SpringBootTest;
    6. import org.springframework.cloud.client.ServiceInstance;
    7. import org.springframework.cloud.client.discovery.DiscoveryClient;
    8. import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
    9. import java.util.List;
    10. @SpringBootTest(classes = {AutoDeliverApplication.class})
    11. @RunWith(SpringJUnit4ClassRunner.class)
    12. public class AutoDeliverApplicationTest {
    13. @Autowired
    14. private DiscoveryClient discoveryClient;
    15. @Test
    16. public void testInstanceMetadata() {
    17. // 从EurekaServer获取指定微服务实例
    18. List instances = discoveryClient.getInstances("lagou-service-resume");
    19. // 循环打印每个微服务实例的元数据信息
    20. for (int i = 0; i < instances.size(); i++) {
    21. ServiceInstance serviceInstance = instances.get(i);
    22. System.out.println(serviceInstance);
    23. }
    24. }
    25. }

    元数据查看如下

    2、Eureka客户端详解 

    服务提供者(也是Eureka客户端)要向EurekaServer注册服务,并完成服务续约等工作

    服务注册详解(服务提供者)

    1. 当我们导入了eureka-client依赖坐标,配置Eureka服务注册中心地址
    2. 服务在启动时会向注册中心发起注册请求,携带服务元数据信息
    3. Eureka注册中心会把服务的信息保存在Map中。

    服务续约详解(服务提供者)

            服务每隔30秒会向注册中心续约(心跳)一次(也称为报活),如果没有续约,租约在90秒后到期,然后服务会被失效。每隔30秒的续约操作我们称之为心跳检测。

      往往不需要我们调整这两个配置

    # 向Eureka服务中心集群注册服务
    eureka:
            instance:
    # 租约续约间隔时间,默认30秒
                    lease-renewal-interval-in-seconds: 30
    # 租约到期,服务时效时间,默认值90秒,服务超过90秒没有发生心跳,EurekaServer会将服务从列表移除
                    lease-expiration-duration-in-seconds: 90

    获取服务列表详解(服务消费者)

            每隔30秒服务会从注册中心中拉取一份服务列表,这个时间可以通过配置修改。往往不需要我们调整。

    # 向Eureka服务中心集群注册服务
    eureka:
            client:

    # 每隔多久拉取一次服务列表
                    registry-fetch-interval-seconds: 30

    1. 服务消费者启动时,从 EurekaServer服务列表获取只读备份,缓存到本地
    2. 每隔30秒,会重新获取并更新数据
    3. 每隔30秒的时间可以通过配置eureka.client.registry-fetch-interval-seconds修改

    3、Eureka服务端详解

    服务下线

    • 当服务正常关闭操作时,会发送服务下线的REST请求给EurekaServer。
    • 服务中心接受到请求后,将该服务置为下线状态

    失效剔除

            Eureka Server会定时(间隔值是eureka.server.eviction-interval-timer-in-ms,默认60s)进行检查,如果发现实例在在一定时间(此值由客户端设置的eureka.instance.lease-expiration-duration-in-seconds定义,默认值为90s)内没有收到心跳,则会注销此实例。

    自我保护

      服务提供者 —> 注册中心

            定期的续约(服务提供者和注册中心通信),假如服务提供者和注册中心之间的网络有点问题,不代表服务提供者不可用,不代表服务消费者无法访问服务提供者。如果在15分钟内超过85%的客户端节点都没有正常的心跳,那么Eureka就认为客户端与注册中心出现了网络故障,Eureka Server自动进入自我保护机制。

      为什么会有自我保护机制?

            默认情况下,如果Eureka Server在一定时间内(默认90秒)没有接收到某个微服务实例的心跳,Eureka Server将会移除该实例。但是当网络分区故障发⽣时,微服务与Eureka Server之间⽆法正常通信,而微服务本身是正常运行的,此时不应该移除这个微服务,所以引入了自我保护机制。

      服务中心页面会显示如下提示信息

    当处于自我保护模式时 

    • 不会剔除任何服务实例(可能是服务提供者和EurekaServer之间网络问题),保证了大多数服务依然可用
    • Eureka Server仍然能够接受新服务的注册和查询请求,但是不会被同步到其它节点上,保证当前节点依然可用,当网络稳定时,当前Eureka Server新的注册信息会被同步到其它节点中。
    • 在Eureka Server工程中通过eureka.server.enable-self-preservation配置可用关停自我保护,默认值是打开

    eureka:
            server:
                    enable-self-preservation: false
    # 关闭自我保护模式(缺省为打开)

    经验:建议生产环境打开自我保护机制

  • 相关阅读:
    SwiftUI 4.0 如何轻松在 iOS 16 中设置 TextEditor 背景色
    Unity学习笔记–无限地图
    【C++刷题】二叉树进阶刷题
    小程序的入门
    刷题之单词搜索(leetcode)
    【算法】算法设计与分析 课程笔记 第一章&第二章
    【High 翻天】Higer-order Networks with Battiston Federico (1)
    Arduino驱动MAX31865读取铂电阻温度
    五万字图文和代码详解kafka的安装与开启ACL权限控制,自定义SASL、ACL存储形式,实际项目使用案例剖析,kafka常用cmd命令使用总结及示例
    一文掌握 Java8 Stream 中 Collectors 的 24 个操作
  • 原文地址:https://blog.csdn.net/weixin_52851967/article/details/126419257