十、(Eureka篇)服务发现和自我保护机制

本文参考:https://www.jianshu.com/p/cb7fa0aa47a8

一、Eureka 的服务发现

EurekaClient 会从 server 端获取一份注册表信息,将其复制一份到 client 端本地,然后进行调用访问其它服务。
所以我们可以在本地获取到所有注册到 Eureka server 端的服务信息。

1、在 client 端的 主启动类加注解 @EnableDiscoveryClient

import org.springframework.cloud.client.discovery.EnableDiscoveryClient;

@SpringBootApplication
@EnableEurekaClient
@EnableDiscoveryClient
public class OrderMain80 {
    public static void main(String[] args) {
        SpringApplication.run(OrderMain80.class, args);
    }
}

2、通过 Spring 的依赖注入可以获取 DiscoveryClient 对象,通过 DiscoveryClient 我们能发现其它服务

import org.springframework.cloud.client.discovery.DiscoveryClient;
...
    @Resource
    private DiscoveryClient discoveryClient;

    @GetMapping("/consumer/discovery/info")
    public Object info() {
        //获取 eureka server 端的所有服务
        List services =  discoveryClient.getServices();
        for (String service :  services) {
            List instances = discoveryClient.getInstances(service);
            log.info("service is {}", service);
            //获取所有实例的信息
            for (ServiceInstance serviceInstance :instances ) {
                log.info("instanceId:{}, serviceId:{}, URI:{}, PORT:{}"
                        , serviceInstance.getInstanceId(), serviceInstance.getServiceId(),serviceInstance.getUri(),serviceInstance.getPort());
            }
        }
        return services;
    }

最终调用可以打印出所有服务和实例信息:


打印信息.png

二、Eureka 的自我保护机制

1、什么是 Eureka 的自我保护机制?

(1)官方定义:自我保护模式正是一种针对网络异常波动的安全保护措施,使用自我保护模式能使Eureka集群更加的健壮、稳定的运行。
(2)工作机制:如果在15分钟内超过85%的客户端节点都没有正常的心跳,那么Eureka就认为客户端与注册中心出现了网络故障,Eureka Server自动进入自我保护机制,此时会出现以下几种情况:

一、Eureka Server不再从注册列表中移除因为长时间没收到心跳而应该过期的服务。

二、Eureka Server仍然能够接受新服务的注册和查询请求,但是不会被同步到其它节点上,保证当前节点依然可用。

三、当网络稳定时,当前Eureka Server新的注册信息会被同步到其它节点中。

2、Eureka 的自我保护机制的相关配置

(1)eureka.server.enable-self-preservation=false

关闭自我保护,保证不可用服务被即使剔除

(2)eureka.server.eviction-interval-timer-in-ms= 60000

eureka server清理无效节点的时间间隔,默认60000毫秒,即60秒

server:
  port: 7001

eureka:
  instance:
#    hostname: localhost      #eureka 服务端的实例名称
    hostname: eureka7001.com      #eureka 服务端的实例名称
  client:
    register-with-eureka: false     #false表示不向注册中心注册自己
    fetch-registry: false       #是否去注册中心fetch信息,false表示自己就是注册中心,所以自己不必找自己去检索服务
    service-url:
      #defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/    #设置与eureka server交互的地址查询服务和注册服务都需要依赖这个地址
      defaultZone: http://eureka7002.com:7002/eureka/    #设置与eureka server交互的地址查询服务和注册服务都需要依赖这个地址
  server:
    enable-self-preservation: false
    eviction-interval-timer-in-ms: 60000
自我保护机制打开.png
自我保护机制关闭.png

你可能感兴趣的:(十、(Eureka篇)服务发现和自我保护机制)