zoukankan      html  css  js  c++  java
  • Eureka使用总结

    关于Eureka:

    提供基于 REST的服务,在集群中主要用于服务管理。使用该框架,可以将业务组件注册到Eureka容器中,这些组件可进行集群部署,Eureka主要维护这些服务的列表并自动检查他们的状态。

    架构图:

    image

    常用配置说明:

    服务端:

    eureka.client.register-with-eureka 属性,声明是否将自己的信息注册到Eureka服务器,默认为true。

    eureka.client.fetch-registry 属性,表示是否到Eureka服务器中抓取注册信息。

    eureka.server.eviction-interval-timer-in-ms 属性来修改注册表的清理间隔,单位是毫秒。

    eureka.server.enable-self-preservation 属性,将值设置为false来关闭自我保护机制。默认为true。

    eureka.server.renewal-percent-threshold : 0.85 ,自我保护阈值。

    eureka.server. use-read-only-response-cache: false ,关闭从 readOnly (缓存)读注册表信息。

    eureka.server.response-cache-update-interval-ms: 1000 ,readwrite 和 readonly 同步时间间隔。单位毫秒。

    优化

      server:
        # 自我保护,看服务多少。如果服务数量少需要打开,如果服务数量多可以关闭。
        enable-self-preservation: true
        # 自我保护阈值
        renewal-percent-threshold: 0.85
        # 剔除服务时间间隔
        eviction-interval-timer-in-ms: 1000
        # 关闭从readOnly(缓存)读注册表
        use-read-only-response-cache: false
        # readWrite 和 readOnly 同步时间间隔。
        response-cache-update-interval-ms: 1000
    

    客户端:

    eureka.instance.lease-renewal-interval-in-seconds属性,客户端的实例会向服务器周期性的发送心跳,默认是30秒发送一次。

    eureka.client.registry-fetch-interval-seconds属性,客户端抓取注册表并缓存的间隔时间。默认是30秒。

    eureka.instance.leaseExpirationDurationInSecond 属性,服务器端接收心跳请求,如果在一定期限内没有接收到服务实例的心跳,那么会将该实例从注册表中清理掉,其他的客户端将会无法访问这个实例。默认是90 秒,服务器90秒没有收到客户端的心跳,就会将这个实例从列表中清理掉。但是需要注意的是,清理注册表有一个定时器在执行,默认是60秒执行一次,如果将该值设置小于60秒,虽然符合删除实例的条件,但是还没到60秒,这个实例将仍然存在注册表中(因为还没有执行清理)。我们可以在服务器端配置eureka.server.eviction-interval-timer-in-ms 属性来修改注册表的清理间隔,单位是毫秒。

    优化

    	client:
    		#刷新注册表(拉取注册表)间隔
    		registry-fetch-interval-seconds: 5 
    	intance:
    		#心跳续约间隔
    		lease-renewal-interval-in-seconds: 10
    		#心跳过期时间
    		lease-expiration-duration-in-seconds: 10
    

    集群配置

    双台集群的配置

    服务端配置

    service1的配置

    #是否将自己注册到Eureka Server,默认为true
    eureka.client.register-with-eureka=true
    #是否从eureka server获取注册信息
    eureka.client.fetch-registry=true
    #设置服务注册中心的URL,用于client和server端交流
    eureka.client.service-url.defaultZone=http://euk2.com:8002/eureka/
    #实例主机名
    eureka.instance.hostname=euk1.com
    #应用服务名
    spring.application.name=EurekaServer
    server.port=8001
    

    service2的配置

    #是否将自己注册到Eureka Server,默认为true
    eureka.client.register-with-eureka=true
    #是否从eureka server获取注册信息
    eureka.client.fetch-registry=true
    #设置服务注册中心的URL,用于client和server端交流
    eureka.client.service-url.defaultZone=http://euk2.com:8001/eureka/
    #实例主机名
    eureka.instance.hostname=euk2.com
    #应用服务名
    spring.application.name=EurekaServer
    server.port=8002
    

    客户端配置

    #客户端每次都会使用第一个注册服务拉取数据。在使用的时候,需要打乱前两个注册服务的顺序。
    eureka.client.service-url.defaultZone = http://euk1.com:8001/eureka/,http://euk2.com:8002/eureka/
    spring.application.name=user-provider
    

    三台集群的配置

    服务端配置

    eureka:
        client:
            serviceUrl:
                defaultZone: http://euk1.com:8001/eureka/,http://euk2.com:8002/eureka/,http://euk3.com:8003/eureka/
    spring:
        application:
            name: ThreeClustersEurake
    ---
    spring:
        profiles: euk1
    eureka:
        instance:
            hostname: euk1.com
    server:
        port: 8001
    ---
    spring:
        profiles: euk2
    eureka:
        instance:
            hostname: euk2.com
    server:
        port: 8002
    ---
    spring:
        profiles: euk3
    eureka:
        instance:
            hostname: euk3.com
    server:
        port: 8003
    
    
    

    客户端配置

    eureka.client.service-url.defaultZone = http://euk1.com:8001/eureka/,http://euk2.com:8002/eureka/,http://euk3.com:8003/eureka/
    server.port=8004
    spring.application.name=user-provider
    

    服务通知

    @Component
    public class EurekaStateChangeListener {
    
        @EventListener
        public void listen(EurekaInstanceCanceledEvent event){
            System.out.println(event.getServerId()+"	"+event.getAppName()+"服务下线");
        }
    
        @EventListener
        public void listen( EurekaInstanceRegisteredEvent event){
            InstanceInfo instanceInfo = event.getInstanceInfo();
            System.out.println(instanceInfo.getAppName()+"进行注册");
        }
    
        @EventListener
        public void listen(EurekaInstanceRenewedEvent event){
            System.out.println(event.getServerId()+"	"+event.getAppName()+"服务进行续约");
        }
    
        @EventListener
        public void listen(EurekaRegistryAvailableEvent event){
            System.out.println("注册中心启动");
        }
    
        @EventListener
        public void listen(EurekaServerStartedEvent event){
            System.out.println("Eureka Server启动");
        }
    }
    
  • 相关阅读:
    Linux正则和grep命令
    Linux用户和权限
    XP下安装ubuntu
    Linux命令行和shell编程
    Linux软件安装及基本概念
    Linux历史,安装,分区,版本
    Eric Linux
    批量插入数据
    Django 相关
    标签,
  • 原文地址:https://www.cnblogs.com/yuanbeier/p/15421507.html
Copyright © 2011-2022 走看看