精华内容
下载资源
问答
  • eureka配置

    2019-01-02 10:18:26
    springcloud配置中心eureka,源码,解压后使用idea导入即可使用。
  • 主要介绍了springcloud微服务之Eureka配置详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
  • eureka配置详解

    2018-06-26 17:14:07
    springcloud中eureka配置的详细中文介绍,可以在appliaction中进行配置
  • eureka配置文件详解

    2020-04-03 15:06:58
    eureka配置文件详解 配置项解析 1.1 通用配置 应用名称,将会显示在Eureka界面的应用名称列 spring.application.name=config-service 应用端口,Eureka服务端默认为:8761 server.port=3333 1.2 eureka.server前缀...

    eureka配置文件详解

    1. 配置项解析
      1.1 通用配置
      应用名称,将会显示在Eureka界面的应用名称列
      spring.application.name=config-service

    应用端口,Eureka服务端默认为:8761
    server.port=3333

    1.2 eureka.server前缀的配置项
    是否允许开启自我保护模式,缺省:true
    当Eureka服务器在短时间内丢失过多客户端时,自我保护模式可使服务端不再删除失去连接的客户端
    eureka.server.enable-self-preservation = false

    Peer节点更新间隔,单位:毫秒
    eureka.server.peer-eureka-nodes-update-interval-ms =

    Eureka服务器清理无效节点的时间间隔,单位:毫秒,缺省:60000,即60秒
    eureka.server.eviction-interval-timer-in-ms = 60000

    1.3 eureka.instance前缀的配置项
    服务名,默认取 spring.application.name 配置值,如果没有则为 unknown
    eureka.instance.appname = eureka-client

    实例ID
    eureka.instance.instance-id = eureka-client-instance1

    应用实例主机名
    eureka.instance.hostname = localhost

    客户端在注册时使用自己的IP而不是主机名,缺省:false
    eureka.instance.prefer-ip-address = false

    应用实例IP
    eureka.instance.ip-address = 127.0.0.1

    服务失效时间,失效的服务将被剔除。单位:秒,默认:90
    eureka.instance.lease-expiration-duration-in-seconds = 90

    服务续约(心跳)频率,单位:秒,缺省30
    eureka.instance.lease-renewal-interval-in-seconds = 30

    状态页面的URL,相对路径,默认使用 HTTP 访问,如需使用 HTTPS则要使用绝对路径配置,缺省:/info
    eureka.instance.status-page-url-path = /info

    健康检查页面的URL,相对路径,默认使用 HTTP 访问,如需使用 HTTPS则要使用绝对路径配置,缺省:/health
    eureka.instance.health-check-url-path = /health

    1.4 eureka.client前缀
    Eureka服务器的地址,类型为HashMap,缺省的Key为 defaultZone;缺省的Value为 http://localhost:8761/eureka
    如果服务注册中心为高可用集群时,多个注册中心地址以逗号分隔。
    eureka.client.service-url.defaultZone=http:// e u r e k a . i n s t a n c e . h o s t n a m e : {eureka.instance.hostname}: eureka.instance.hostname:{server.port}/eureka

    是否向注册中心注册自己,缺省:true
    一般情况下,Eureka服务端是不需要再注册自己的
    eureka.client.register-with-eureka = true

    是否从Eureka获取注册信息,缺省:true
    一般情况下,Eureka服务端是不需要的
    eureka.client.fetch-registry = true

    客户端拉取服务注册信息间隔,单位:秒,缺省:30
    eureka.client.registry-fetch-interval-seconds = 30

    是否启用客户端健康检查
    eureka.client.health-check.enabled = true

    eureka.client.eureka-service-url-poll-interval-seconds = 60

    连接Eureka服务器的超时时间,单位:秒,缺省:5
    eureka.client.eureka-server-connect-timeout-seconds = 5

    从Eureka服务器读取信息的超时时间,单位:秒,缺省:8
    eureka.client.eureka-server-read-timeout-seconds = 8

    获取实例时是否只保留状态为 UP 的实例,缺省:true
    eureka.client.filter-only-up-instances = true

    Eureka服务端连接空闲时的关闭时间,单位:秒,缺省:30
    eureka.client.eureka-connection-idle-timeout-seconds = 30

    从Eureka客户端到所有Eureka服务端的连接总数,缺省:200
    eureka.client.eureka-server-total-connections = 200

    从Eureka客户端到每个Eureka服务主机的连接总数,缺省:50
    eureka.client.eureka-server-total-connections-per-host = 50

    1. 配置项说明
      Eureka中有一些配置项,通过查看网上的资料可以大概知道其含义,然而如果没有一个直观的指导,并不能清晰地认识他们实际的作用效果。下面通过截图对部分配置项加以解释说明。
      2.1 spring.application.name和eureka.instance.appname
      同时配置时,eureka.instance.appname优先级更高。
      如果没有配置eureka.instance.appname,则使用spring.application.name的值,如果连spring.application.name都没有配置,则取unknown。
      该配置项对应Eureka界面下图红框的内容:

    2.2 eureka.instance.instance-id
    配置项eureka.instance.instance-id的值决定了下图右侧红框中的显示内容:

    如果没有设置eureka.instance.instance-id,那么显示的值将是一个由Eureka自动判断生成的编号:

    2.3 eureka.instance.prefer-ip-address、eureka.instance.hostname、eureka.instance.ip-address
    eureka.instance前缀的配置项中,这几个配置项绝对烧脑,根据周立的博客,在eureka.instance.prefer-ip-address = true时,实例优先使用eureka.instance.ip-address的值进行注册,如果没有配置eureka.instance.ip-address,则使用第一个非回环IP地址进行注册。
    此时,我们打开Eureka的界面,在实例上右键,复制链接地址;或将鼠标放在下图右上方的链接上(不点击),就可以获取实例的地址,如下图左下角,可见此时实例注册的是IP:

    而当eureka.instance.prefer-ip-address = false时,同样的方式可以查看实例注册地址采用了主机名eureka.instance.hostname的值:

    1. 配置Bean源码
      最后,对应于本文出现的配置项,Eureka中定义的源码类如下。
      eureka.server前缀的配置项
      org.springframework.cloud.netflix.eureka.server.EurekaServerConfigBean

    eureka.instance前缀的配置项
    org.springframework.cloud.netflix.eureka.EurekaInstanceConfigBean

    eureka.client前缀的配置项
    org.springframework.cloud.netflix.eureka.EurekaClientConfigBean

    转载:https://www.cnblogs.com/zyon/p/11023750.html

    展开全文
  • Eureka配置文件说明

    千次阅读 2019-03-06 09:53:59
    Spring Cloud Eureka配置文件例子与详细说明 Eureka服务端: application.yml # eureka(最)简单单点开发配置。支持yml与properties两种,yml文件后缀必须为yml,不能是yaml,否则找不到该文件,使用默认配置。 #...

    Spring Cloud Eureka配置文件例子与详细说明

    Eureka服务端:

    application.yml

    # eureka(最)简单单点开发配置。支持yml与properties两种,yml文件后缀必须为yml,不能是yaml,否则找不到该文件,使用默认配置。
    # yml文件大小写敏感;
    # 每个级别至少用1个空格缩进,也可多个,但同级别的必须一致,不支持tab,本项目按照eclipse的插件(spring官方Spring Tool Suite3.9.3)统一使用两个空格;
    # 属性值与冒号间必须有一个空格。比如port:8761则不会生效。
    server: 
      port: 8761 # eureka服务器端口号。尽管无论官网还是大部分参考书都使用8761,但默认并不是,而是8080
    
    eureka:
      client:
        # 默认情况下,eureka server同时也是eureka client,用于相互注册形成高可用eureka服务。
        # 单点时,如果registerWithEureka配置为true,则eureka server会报错Cannot execute request on any known server
        registerWithEureka: false # 是否注册到eureka服务,默认为true,当前已为eureka server,且单点eureka,故配置为false
        fetchRegistry: false # 是否在本地缓存注册表信息,默认为true,当前为单点eureka server,不需要从其他eureka除获取注册表信息,更谈不上缓存,故配置为false
      #server:
        # 在服务器接收请求之前等待的初始时间,默认等待5min(John Carnell)
        #waitTimeInMsWhenSyncEmpty: 5 # John说开发时最好注释此配置,服务注册需要3次心跳,每次10s,也就是30s才能显示在eureka。但是为什么我这里马上就显示呢?
    
    # 指定生效的配置
    spring:
      profiles:
        active: dev
    
    # 用三个连接符进行profile分割,根据active的profiles选择执行哪一段,上面没有profiles的表示公共执行部分
    ---
    
    # 本地开发环境
    spring:
      profiles: dev
    
    security:                           # 开启服务注册认证机制
       basic:
          enabled: true                 # 是否开启认证,默认true,需开启时可省略。
       user:
          name: eureka                  # 认证时,使用的用户名
          password: eureka              # 认证时,使用的密码
    
    eureka:
      # 详见EurekaServerConfigBean,需要注意与Client和Instance在client的jar包不同,Server是在server的jar包。
      # eureka的各项配置可见EurekaXXXConfigBean。
      server:
        # 自我保护机制,默认true。打开后,心跳失败在15分钟内低于85%(renewalPercentThreshold)的服务,也不进行剔除。
        # 关闭后,主页提示:RENEWALS ARE LESSER THAN THE THRESHOLD. THE SELF PRESERVATION MODE IS TURNED OFF.
        # THIS MAY NOT PROTECT INSTANCE EXPIRY IN CASE OF NETWORK/OTHER PROBLEMS.
        enableSelfPreservation: true # 本地调试时可fasle关闭。但生产建议打开,可防止因网络不稳定等原因导致误剔除服务。
        renewalPercentThreshold: 0.85 # 默认85%
      client:
        serviceUrl:
          # registerWithEureka关闭后,defaultZone没有配置的必要。如果打开,即使配置为本机一样报错。
          # 也就是说defaultZone任何时候都没有配置为localhost的必要。这点上John的配置更好,永超和周立包括志朋的配置有点多余。
          # 但是周立说的对,这个属性默认配置是http://localhost:8761/eureka,也就是当你没有用户名密码安全认证时,本机调试时,客户端可以不配置,
          # 但对于server来说,这个默认没有什么作用。对于client来说,也只有调试的时候有点作用。
          # 但有一点很奇怪,既然默认了8761端口,为什么eureka server的默认端口要用8080而不是8761呢?
          defaultZone: http://${security.user.name}:${security.user.password}@localhost:${server.port}/eureka # 本配置应删除。
    
    ---
    
    # 测试环境。profiles配置为主机名,根据主机名进行激活,需在启动脚本中--spring.profiles.active=${HOST_NAME},
    # 因为启动脚本的优先级比本文件的active优先级高。
    # 多台eureka高可用环境下,每台eureka的defaultZone配置都不一样,因为不能把自己也配置上,因为为了保证每台eureka的代码配置一致方便发布,
    # 需要采取yml的---分隔,然后通过主机名启动这种模式进行。
    spring:
      profiles: hifu-test1
    
    security:
      user:
        name: eureka
        password: eureka
    
    eureka:
      instance:
         hostname: hifu-test1
      server:
         # eureka server刷新readCacheMap的时间,注意,client读取的是readCacheMap,这个时间决定了多久会把readWriteCacheMap的缓存更新到readCacheMap上
         # 默认30秒,eclipse提示默认0应该是错误的,源代码中responseCacheUpdateIntervalMs = 30 * 1000。
         response-cache-update-interval-ms: 3000 # 网上很多专家的博客错误写成responseCacheUpdateInvervalMs,请注意。这里配置为3秒。
         # eureka server缓存readWriteCacheMap失效时间,这个只有在这个时间过去后缓存才会失效,失效前不会更新,
         # 过期后从registry重新读取注册服务信息,registry是一个ConcurrentHashMap。
         # 由于启用了evict其实就用不太上改这个配置了,默认180s
         responseCacheAutoExpirationInSeconds: 180
         # 启用主动失效,并且每次主动失效检测间隔为3s。源码evictionIntervalTimerInMs = 60 * 1000,默认一分钟。
         # 需要注意的是该配置会打印INFO日志,增加info日志量,修改后从每60秒打印一次变成3秒打印一次。
         evictionIntervalTimerInMs: 3000 # 注意不要写成EvictionIntervalTimerInMs,yml大小写敏感。
      client:
        serviceUrl:
          # 配置其他eureka的地址,如果多台则逗号分隔。
          defaultZone: http://${security.user.name}:${security.user.password}@10.13.22.19:${server.port}/eureka
        healthcheck:
          enabled: true
        registerWithEureka: true # eureka的高可用,需要互相注册,配置为true,覆盖本文件最上面的默认配置false。
        fetchRegistry: false # eureka之间如果网络不稳定,客户端一般也会缓存了注册列表,因此eureka服务可以不缓存,我觉得更能确保eureka之间的一致。
    
    ---
    spring:
      profiles: hifu-test2
    
    security:
      user:
        name: eureka
        password: eureka
    
    eureka:
      instance:
         hostname: hifu-test2
      server:
        responseCacheUpdateIntervalMs: 3000
        responseCacheAutoExpirationInSeconds: 180
        evictionIntervalTimerInMs: 3000
      client:
        serviceUrl:
           defaultZone: http://${security.user.name}:${security.user.password}@10.13.22.18:${server.port}/eureka
        healthcheck:
           enabled: true
        registerWithEureka: true
        fetchRegistry: false
    

    Eureka客户端:

    server:
       port: 8010 #设置当前服务端口
       context-path: /api #设置服务上下文路径
    
    #debug: true   
    
    eureka:
      # 详见EurekaClientConfigBean(实现EurekaClientConfig)
      client:
        # 是否启用eureka客户端。默认true
        enabled: true # 本地调试时,若不想启动eureka,可配置false即可,而不需要注释掉@EnableDiscoveryClient这么麻烦。感谢永超,从他的书知道这个属性。
        # 支持registerWithEureka(John、周立)和register-with-eureka(翟永超)两种写法,eclipse的STS默认使用后者。
        # 基本所有配置使用横杠或者驼峰都可以,鼠标放在上面,eclipse都可以显示详细注解和默认值(如果有)。
        registerWithEureka: true # 默认true,因此也可省略。
        fetchRegistry: true # 默认true,此处可不配置。
        # 缓存清单更新时间,默认30秒。见EurekaClientConfigBean,其中DefaultEurekaClientConfig可不看(前者spring实现,后者Netflix实现)
        registry-fetch-interval-seconds: 30 # 如果想eureka server剔除服务后尽快在client体现,我觉得可缩短此时间。
        # eureka服务的位置,如配置错误,则:Cannot execute request on any known server
        # 详见:com.netflix.discovery.endpoint.EndpointUtils
        serviceUrl:
          defaultZone: http://eureka:eureka@localhost:8761/eureka # 如果需要注册多个服务器,可用逗号隔开,例如:,
        # 周立在Camden SR4(对应eureka-client.jar1.2.6)中说有该属性,但我在SR6(对应1.2.4)和SR4中都找不到;
        # 又查找了Brixton SR7(对应1.1.7,其实不光eureka-client,整个spring-cloud-netflix都是这个版本),也是没有。
        # 这是因为该属性IDE确实不能提示,但写法是正确的。作用是修改eureka的健康检查方式(心跳),改为用actuator,详见HealthCheckHandler HealthIndicator。
        # 周立写的不是太详细,可详见这博客:https://blog.csdn.net/xiao_jun_0820/article/details/77991963
        # 若配置healthcheck,需引入actuator。
        healthcheck:
          enabled: true # 我建议配置为true。心跳机制有个问题,如当客户端的数据库连接出现问题导致不可用时,心跳机制不能反映,但actuator的health可以。
      # 详见EurekaInstanceConfigBean。或com.netflix.appinfo.InstanceInfo(与spring大致相同)
      instance:
        # 是否以IP注册到Eureka Server上,如果false则不是IP而是服务器名称
        # 但我设置了false,eureka主页仍显示192.168.100.16:client-microservice:8010
        preferIpAddress: true # 默认false。应该始终设置为true。如果基于Docker等容器的部署,容器会生成一个随机的主机名,此时DNS不存在该名,无法解析 - John Carnell
        # 实例名。
        instanceId: ${spring.cloud.client.hostname}:${spring.application.name}:${spring.application.instance_id:${server.port}}
        # 服务续约的两个重要属性
        leaseRenewalIntervalInSeconds: 30 # 服务续约间隔时间。默认每隔30秒,客户端会向服务端发送心跳。见DiscoveryClient.initScheduledTasks
        leaseExpirationDurationInSeconds: 90 # 服务失效时间。缺省为90秒服务端接收不到客户端的心跳,则剔除该客户端服务实例。
        # 端点配置。若配置了context-path,actuator的监控端点会增加前缀,此时eureka也需要相应增加
        status-page-url-path: ${server.context-path}/info
        health-check-url-path: ${server.context-path}/health
    展开全文
  • Spring Cloud Eureka 配置原理详解

    千次阅读 2019-09-02 20:29:30
      首先对于Eureka注册中心默认大家都有所了解,这篇博客主要就是来通过Eureka的配置源码来了解一下关于Eureka配置中心都有那些详细的配置内容。对于Eureka 客户端的配置主要分为两个方面 服务注册相关的配置信息...

    导语
      首先对于Eureka注册中心默认大家都有所了解,这篇博客主要就是来通过Eureka的配置源码来了解一下关于Eureka配置中心都有那些详细的配置内容。对于Eureka 客户端的配置主要分为两个方面

    • 服务注册相关的配置信息,包括服务注册中心的地址、服务获取的时间间隔、可用区域等
    • 服务实例相关配置信息,包括服务的实例名、IP地址、端口号、健康检查路径等等。

    配置文件详解

      对于Eureka来说作为注册中心既要有服务端还要有客户端。这样的话就需要它既要有服务器端的配置也要有客户端的配置。当然服务端以eureka.server前缀,客户端以eureka.client为前缀,下面就来介绍一下客户端的配置。

      关于客户端的配置类主要是来自于一个配置文件,通过对于SpringBoot自动配置机制的了解可以知道,SpringBoot的自动配置实现通过的是一个配置类,而在SpringCloud中对于这个配置类的支持如下

    org.springframework.cloud.netflix.eureka.EurekaClientConfigBean
    

    eureka.client

    在这个类中提供了很多的配置属性,对应于配置文件中的配置项。下面就通过源码来详细看一下其中的配置

    public static final String PREFIX = "eureka.client";
    public static final String DEFAULT_URL = "http://localhost:8761" + DEFAULT_PREFIX
    			+ "/";
    public static final String DEFAULT_ZONE = "defaultZone";
    private static final int MINUTES = 60;
    

      首先会看到在配置类中为所有的配置都设置了一个统一的客户端前缀 “eureka.client”,表示这是一个客户端的配置,并且指定了默认的服务注册中心地址。那么这个是怎么实现的呢?
      在配置文件中是通过如下的方式进行配置的

    eureka: 
     client:
       service-url:
            defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
    

    在代码中是怎么实现呢?

    /**
    	 * Map of availability zone to list of fully qualified URLs to communicate with eureka
    	 * server. Each value can be a single URL or a comma separated list of alternative
    	 * locations.
    	 *
    	 * Typically the eureka server URLs carry protocol,host,port,context and version
    	 * information if any. Example:
    	 * http://ec2-256-156-243-129.compute-1.amazonaws.com:7001/eureka/
    	 *
    	 * The changes are effective at runtime at the next service url refresh cycle as
    	 * specified by eurekaServiceUrlPollIntervalSeconds.
    	 */
    	private Map<String, String> serviceUrl = new HashMap<>();
    
    	{
    		this.serviceUrl.put(DEFAULT_ZONE, DEFAULT_URL);
    	}
    
    

    会看到这个serviceURL其实是一个Map,也就是说可以有多个对应的关系。当需要构建高可用的服务注册中心集群的时候,可以为参数的Value配置多个注册中心地址通过逗号进行分隔。当然有的时候为了注册中心的安全考虑,会为注册中心加上安全校验,这个时候配置serviceURL的时候就需要增加对应的安全校验信息,例如加上用户名或者密码等等。

    enable

    	/**
    	 * Flag to indicate that the Eureka client is enabled.
    	 */
    	private boolean enabled = true;
    

    判断是否是一个客户端实例

    registryFetchIntervalSeconds

    /**
    	 * Indicates how often(in seconds) to fetch the registry information from the eureka
    	 * server.
    	 */
    	private int registryFetchIntervalSeconds = 30;
    

    从Eureka服务端获取注册信息的时间间隔单位是秒

    instanceInfoReplicationIntervalSeconds

    /**
    	 * Indicates how often(in seconds) to replicate instance changes to be replicated to
    	 * the eureka server.
    	 */
    	private int instanceInfoReplicationIntervalSeconds = 30;
    

    更新实例信息的变化到Eureka服务端的时间间隔,单位为秒

    initialInstanceInfoReplicationIntervalSeconds

    	/**
    	 * Indicates how long initially (in seconds) to replicate instance info to the eureka
    	 * server
    	 */
    	private int initialInstanceInfoReplicationIntervalSeconds = 40;
    

    初始化实例信息到Eureka服务端的时间间隔,单位为秒

    eurekaServiceUrlPollIntervalSeconds

    	/**
    	 * Indicates how often(in seconds) to poll for changes to eureka server information.
    	 * Eureka servers could be added or removed and this setting controls how soon the
    	 * eureka clients should know about it.
    	 */
    	private int eurekaServiceUrlPollIntervalSeconds = 5 * MINUTES;
    

    轮询Eureka服务端地址更改的时间间隔,单位为秒,当与Spring Cloud Config配合,动态刷新Eureka的serviceURL地址是需要关注这个参数

    eurekaServerReadTimeoutSeconds

    	/**
    	 * Indicates how long to wait (in seconds) before a read from eureka server needs to
    	 * timeout.
    	 */
    	private int eurekaServerReadTimeoutSeconds = 8;
    

    读取Eureka Server信息的超时时间,单位为秒

    eurekaServerConnectTimeoutSeconds

    /**
    	 * Indicates how long to wait (in seconds) before a connection to eureka server needs
    	 * to timeout. Note that the connections in the client are pooled by
    	 * org.apache.http.client.HttpClient and this setting affects the actual connection
    	 * creation and also the wait time to get the connection from the pool.
    	 */
    	private int eurekaServerConnectTimeoutSeconds = 5;
    

    连接Eureka Server的超时时间,单位为秒

    eurekaServerTotalConnections

    	/**
    	 * Gets the total number of connections that is allowed from eureka client to all
    	 * eureka servers.
    	 */
    	private int eurekaServerTotalConnections = 200;
    

    从Eureka客户端到所有Eureka服务端的连接总数

    eurekaServerTotalConnectionsPerHost

    	/**
    	 * Gets the total number of connections that is allowed from eureka client to a eureka
    	 * server host.
    	 */
    	private int eurekaServerTotalConnectionsPerHost = 50;
    

    从Eureka客户端到每个Eureka服务端主机的连接总数

    eurekaConnectionIdleTimeoutSeconds

    /**
    	 * Indicates how much time (in seconds) that the HTTP connections to eureka server can
    	 * stay idle before it can be closed.
    	 *
    	 * In the AWS environment, it is recommended that the values is 30 seconds or less,
    	 * since the firewall cleans up the connection information after a few mins leaving
    	 * the connection hanging in limbo
    	 */
    	private int eurekaConnectionIdleTimeoutSeconds = 30;
    

    Eureka服务端连接的空闲关闭时间,单位为秒

    heartbeatExecutorThreadPoolSize

    /**
    	 * The thread pool size for the heartbeatExecutor to initialise with
    	 */
    	private int heartbeatExecutorThreadPoolSize = 2;
    

    心跳连接池的初始化线程数

    heartbeatExecutorExponentialBackOffBound

    /**
    	 * Heartbeat executor exponential back off related property. It is a maximum
    	 * multiplier value for retry delay, in case where a sequence of timeouts occurred.
    	 */
    	private int heartbeatExecutorExponentialBackOffBound = 10;
    

    心跳超时重试延迟时间的最大乘数值

    cacheRefreshExecutorThreadPoolSize

    /**
    	 * The thread pool size for the cacheRefreshExecutor to initialise with
    	 */
    	private int cacheRefreshExecutorThreadPoolSize = 2;
    
    

    缓存刷新线程池的初始化线程数

    cacheRefreshExecutorExponentialBackOffBound

    	/**
    	 * Cache refresh executor exponential back off related property. It is a maximum
    	 * multiplier value for retry delay, in case where a sequence of timeouts occurred.
    	 */
    	private int cacheRefreshExecutorExponentialBackOffBound = 10;
    

    缓存刷新重试延迟时间的最大乘数值

    registerWithEureka

    /**
    	 * Indicates whether or not this instance should register its information with eureka
    	 * server for discovery by others.
    	 *
    	 * In some cases, you do not want your instances to be discovered whereas you just
    	 * want do discover other instances.
    	 */
    	private boolean registerWithEureka = true;
    

    是否要将自身注册到Eureka服务端

    preferSameZoneEureka

    /**
    	 * Indicates whether or not this instance should try to use the eureka server in the
    	 * same zone for latency and/or other reason.
    	 *
    	 * Ideally eureka clients are configured to talk to servers in the same zone
    	 *
    	 * The changes are effective at runtime at the next registry fetch cycle as specified
    	 * by registryFetchIntervalSeconds
    	 */
    	private boolean preferSameZoneEureka = true;
    

    是否偏好使用处于相同Zone的Eureka服务端

    filterOnlyUpInstances

    /**
    	 * Indicates whether to get the applications after filtering the applications for
    	 * instances with only InstanceStatus UP states.
    	 */
    	private boolean filterOnlyUpInstances = true;
    

    获取实例时是否过滤,仅保留UP状态的实例

    fetchRegistry

    /**
    	 * Indicates whether this client should fetch eureka registry information from eureka
    	 * server.
    	 */
    	private boolean fetchRegistry = true;
    

    是否从Eureka服务端获取注册信息。

    配置原理

      上面所描述的是一些常用的配置属性,在配置文件中可以进行配置,当然在EurekaClientConfigBean配置类中还提供了其他配置属性,有兴趣的可以查看源码根据自己的业务需求进行配置。
      这里会有个疑问,既然是使用了SpringBoot的自动配置原理,那么为什么这里的配置属性不是xxxProperties结尾的呢?
      在这里我们首先需要关注一个接口

    @ImplementedBy(DefaultEurekaClientConfig.class)
    public interface EurekaClientConfig {
    
    

    这里我们关注一个注解@ImplementedBy,要知道在其他的配置类上都是通过@Import进行组件注入的为什么这里使用的这个注解,这个注解打破了传统的DI。
      首先会注意到在这个注解上标注了一个配置类,可以进入到这个配置类

    @Singleton
    @ProvidedBy(DefaultEurekaClientConfigProvider.class)
    public class DefaultEurekaClientConfig implements EurekaClientConfig {
    

    会看到这个配置其实是实现了刚刚那个配置接口。在这个配置类上标注了另一个注解@ProvidedBy ,这里继续深入这个注解

    package com.google.inject;
    
    import static java.lang.annotation.ElementType.TYPE;
    import static java.lang.annotation.RetentionPolicy.RUNTIME;
    
    import java.lang.annotation.Retention;
    import java.lang.annotation.Target;
    
    /**
     * A pointer to the default provider type for a type.
     *
     * @author crazybob@google.com (Bob Lee)
     */
    @Retention(RUNTIME)
    @Target(TYPE)
    public @interface ProvidedBy {
    
      /**
       * The implementation type.
       */
      Class<? extends javax.inject.Provider<?>> value();
    }
    

    在这里插入图片描述

    public class DefaultEurekaClientConfigProvider implements Provider<EurekaClientConfig> {
    
        @Inject(optional = true)
        @EurekaNamespace
        private String namespace;
    
        private DefaultEurekaClientConfig config;
        
        @Override
        public synchronized EurekaClientConfig get() {
            if (config == null) {
                config = (namespace == null)
                        ? new DefaultEurekaClientConfig()
                        : new DefaultEurekaClientConfig(namespace);
                        
                // TODO: Remove this when DiscoveryManager is finally no longer used
                DiscoveryManager.getInstance().setEurekaClientConfig(config);
            }
    
            return config;
        }
    }
    

    通过上面的代码,会注意到其实绕了一大圈,最终还是没有使用到EurekaClientConfigBean类进行注入操作,那么它是怎么进行属性绑定呢?通过下面的类图,就可以清楚的看到
    在这里插入图片描述
    会看看到对于它的属性绑定操作其实是通过另外的方式。一方面要支持自动配置,另一方面还要支持Config的动态配置

    @Configuration
    @EnableConfigurationProperties
    @ConditionalOnClass(EurekaClientConfig.class)
    @Import(DiscoveryClientOptionalArgsConfiguration.class)
    @ConditionalOnBean(EurekaDiscoveryClientConfiguration.Marker.class)
    @ConditionalOnProperty(value = "eureka.client.enabled", matchIfMissing = true)
    @AutoConfigureBefore({ NoopDiscoveryClientAutoConfiguration.class,
    		CommonsClientAutoConfiguration.class, ServiceRegistryAutoConfiguration.class })
    @AutoConfigureAfter(name = {"org.springframework.cloud.autoconfigure.RefreshAutoConfiguration",
    		"org.springframework.cloud.netflix.eureka.EurekaDiscoveryClientConfiguration",
    		"org.springframework.cloud.client.serviceregistry.AutoServiceRegistrationAutoConfiguration"})
    public class EurekaClientAutoConfiguration {
    
    	@Bean
    	@ConditionalOnMissingBean(value = EurekaClientConfig.class, search = SearchStrategy.CURRENT)
    	public EurekaClientConfigBean eurekaClientConfigBean(ConfigurableEnvironment env) {
    		EurekaClientConfigBean client = new EurekaClientConfigBean();
    		if ("bootstrap".equals(this.env.getProperty("spring.config.name"))) {
    			// We don't register during bootstrap by default, but there will be another
    			// chance later.
    			client.setRegisterWithEureka(false);
    		}
    		return client;
    	}
    
    

    到这里就会看到如果在容器中没有EurekaClientConfig的时候才会有自动配置生效。

    总结

      通过代码的跟踪会发现在SpringCloud Eureka配置中利用了两个注解来动态的注入配置,让Eureka既可以实现SpringBoot的自动配置功能也可以实现基于配置模块Config的动态配置,当然后面的博客中还会对他的动态代理模式进行详细分析。

    展开全文
  • 细心的读者会发现application.yml中有关eureka的配置从何而来呢,...eureka配置源码分析 maven仓库中找到spring-cloud-netflix-eureka-client和maven仓库中找到spring-cloud-netflix-eureka-server下载最新的spring-c

    细心的读者会发现application.yml中有关eureka的配置从何而来呢,怎么去查呢,本节将介绍所有关于eureka的配置项,并详细介绍其中几种的含义

    eureka配置源码分析

    maven仓库中找到spring-cloud-netflix-eureka-clientmaven仓库中找到spring-cloud-netflix-eureka-server下载最新的spring-cloud-netflix-eureka-XXXX-1.4.1.RELEASE.jar。解压缩打开META-INF/spring-configuration-metadata.json文件即可看到所有的可配置内容properties,几乎所有配置中都有(全)(尼玛)(英文)

    client

    通过groups中的内容可以看到对应的类是什么

    "groups": [
        {
          "sourceType": "org.springframework.cloud.netflix.eureka.EurekaClientConfigBean",
          "name": "eureka.client",
          "type": "org.springframework.cloud.netflix.eureka.EurekaClientConfigBean"
        },
        {
          "sourceType": "org.springframework.cloud.netflix.eureka.EurekaClientConfigBean",
          "name": "eureka.client.transport",
          "sourceMethod": "getTransport()",
          "type": "com.netflix.discovery.shared.transport.EurekaTransportConfig"
        },
        {
          "sourceType": "org.springframework.cloud.netflix.eureka.EurekaInstanceConfigBean",
          "name": "eureka.instance",
          "type": "org.springframework.cloud.netflix.eureka.EurekaInstanceConfigBean"
        }
    ]

    通过properties的配置可以看到有哪些配置项可用

    "properties": [
        {
          "sourceType": "org.springframework.cloud.netflix.eureka.EurekaInstanceConfigBean",
          "defaultValue": 90,
          "name": "eureka.instance.lease-expiration-duration-in-seconds",
          "description": "Indicates the time in seconds that the eureka server waits since it received the\n last heartbeat before it can remove this instance from its view and there by\n disallowing traffic to this instance.\n\n Setting this value too long could mean that the traffic could be routed to the\n instance even though the instance is not alive. Setting this value too small could\n mean, the instance may be taken out of traffic because of temporary network\n glitches.This value to be set to atleast higher than the value specified in\n leaseRenewalIntervalInSeconds.",
          "type": "java.lang.Integer"
        },
        {
          "sourceType": "org.springframework.cloud.netflix.eureka.EurekaInstanceConfigBean",
          "defaultValue": 30,
          "name": "eureka.instance.lease-renewal-interval-in-seconds",
          "description": "Indicates how often (in seconds) the eureka client needs to send heartbeats to\n eureka server to indicate that it is still alive. If the heartbeats are not\n received for the period specified in leaseExpirationDurationInSeconds, eureka\n server will remove the instance from its view, there by disallowing traffic to this\n instance.\n\n Note that the instance could still not take traffic if it implements\n HealthCheckCallback and then decides to make itself unavailable.",
          "type": "java.lang.Integer"
        },
        ... ...
    ]

    server

    通过groups中的内容可以看到对应的类是什么

    "groups": [
        {
          "sourceType": "org.springframework.cloud.netflix.eureka.server.EurekaDashboardProperties",
          "name": "eureka.dashboard",
          "type": "org.springframework.cloud.netflix.eureka.server.EurekaDashboardProperties"
        },
        {
          "sourceType": "org.springframework.cloud.netflix.eureka.server.InstanceRegistryProperties",
          "name": "eureka.instance.registry",
          "type": "org.springframework.cloud.netflix.eureka.server.InstanceRegistryProperties"
        },
        {
          "sourceType": "org.springframework.cloud.netflix.eureka.server.EurekaServerConfigBean",
          "name": "eureka.server",
          "type": "org.springframework.cloud.netflix.eureka.server.EurekaServerConfigBean"
        }
    ]

    通过properties的配置可以看到有哪些配置项可用

    "properties": [
        {
          "sourceType": "org.springframework.cloud.netflix.eureka.server.EurekaDashboardProperties",
          "defaultValue": true,
          "name": "eureka.dashboard.enabled",
          "description": "Flag to enable the Eureka dashboard. Default true.",
          "type": "java.lang.Boolean"
        },
        {
          "sourceType": "org.springframework.cloud.netflix.eureka.server.EurekaDashboardProperties",
          "defaultValue": "\/",
          "name": "eureka.dashboard.path",
          "description": "The path to the Eureka dashboard (relative to the servlet path). Defaults to \"\/\".",
          "type": "java.lang.String"
        },
        ... ...
    ]

    不难看出,eureka.server.*的配置是org.springframework.cloud.netflix.eureka.server.EurekaServerConfigBean在处理,eureka.instance.*的配置是org.springframework.cloud.netflix.eureka.EurekaInstanceConfigBean在处理,eureka.client.*的配置是org.springframework.cloud.netflix.eureka.EurekaClientConfigBean在处理。可以通过Maven打开对应的类查看具体的对应配置内容


    常用配置项

    • eureka.client.registerWithEureka=true/false(默认为true)

    设置本实例是否注册到服务注册中心,因为有些时候实例只想获取服务而不想提供服务

    /**
    * Indicates whether or not this instance should register its information with eureka
    * server for discovery by others.
    *
    * In some cases, you do not want your instances to be discovered whereas you just
    * want do discover other instances.
    */
    • eureka.client.fetchRegistry=true/false(默认为true)

    设置本客户端是否从服务注册中心获取服务

    /**
     * Indicates whether this client should fetch eureka registry information from eurekaserver.
    */
    • eureka.instance.lease-renewal-interval-in-seconds=30(单位是 s)

    设置注册的服务多久向服务注册中心发送心跳包

    /**
     * Indicates how often (in seconds) the eureka client needs to send heartbeats to
     * eureka server to indicate that it is still alive. If the heartbeats are not
     * received for the period specified in leaseExpirationDurationInSeconds, eureka
     * server will remove the instance from its view, there by disallowing traffic to this
     * instance.
     *
     * Note that the instance could still not take traffic if it implements
     * HealthCheckCallback and then decides to make itself unavailable.
     */
    • eureka.instance.lease-expiration-duration-in-seconds=90(单位是 s)

    设置多久没有收到注册服务的心跳包后剔除该服务

    /**
     * Indicates the time in seconds that the eureka server waits since it received the
     * last heartbeat before it can remove this instance from its view and there by
     * disallowing traffic to this instance.
     *
     * Setting this value too long could mean that the traffic could be routed to the
     * instance even though the instance is not alive. Setting this value too small could
     * mean, the instance may be taken out of traffic because of temporary network
     * glitches.This value to be set to atleast higher than the value specified in
     * leaseRenewalIntervalInSeconds.
     */
    • eureka.server.enable-self-preservation=ture/false(默认为true)

    设置服务是否开启保护机制,即即使eureka.instance.lease-expiration-duration-in-seconds超时也不会剔除该服务,一直等待服务重新开启,设置true时会一直持有该服务不释放

    • eureka.client.serviceUrl.defaultZone=http://localhost:1111/eureka/

    设置指定注册服务中心地址,如果查看源码就可以发现,serviceUrl的配置存储在Map类型中,其中key是Zone这里是defaultZone,value为具体的URL地址这里是http://localhost:1111/eureka/,所以也可以配置其它的Zone

    • eureka.client.availability-zones.*

    查看源码可以看到availabilityZones是一个HashMap类型,其中key是region,value是用,隔开的zones,所以自定义zones需要

    eureka.client.region=love
    eureka.client.availabilityZones.love=mlq,roye,fly

    EurekaClientConfigBean.java中获取zones的源码

    @Override
    public String[] getAvailabilityZones(String region) {
        String value = this.availabilityZones.get(region);
        if (value == null) {
            value = DEFAULT_ZONE;
        }
        return value.split(",");
    }
    • eureka.instance.preferIpAddress=true/false(默认false)

    是否优先使用IP地址作为主机名,如果不想配置主机名IP的映射,可以设置此配置为true,然后eureka.instance.hostname就可以直接配置IP地址了

    持续更新中… …

    展开全文
  • Eureka配置详解

    千次阅读 2018-12-12 15:33:44
    Eureka涉及到的参数配置项数量众多,它的很多功能都是通过参数配置来实现的,了解这些参数的含义有助于我们更好的应用Eureka的各种功能,下面对Eureka配置项做具体介绍,供大家参考。  Eureka客户端配置  1、...
  • Eureka配置

    2019-04-15 14:33:35
    Eureka instance 配置项: #服务注册中心实例的主机名 eureka.instance.hostname=localhost #注册在Eureka服务中的应用组名 eureka.instance.app-group-name= #注册在的Eureka服务中的应用名称 eureka.instance...
  • SpringCloud-Eureka配置instanceId显示IP

    千次阅读 2018-07-10 03:59:35
    Eureka配置instanceId显示IP
  • Spring Cloud Eureka配置详解

    千次阅读 2019-01-08 16:13:30
    1 instance:当前Eureka Instance实例信息配置 2 client:Eureka Client客户端特性配置 3 server:Eureka Server注册中心特性配置 4 dashboard:Eureka Server注册中心仪表盘配置 5 Spring CloudEureka常用配置...
  • Eureka配置信息详解

    千次阅读 2018-10-17 16:38:48
    Eureka包含四部分配置 instance : 当前Eureka Instance实例配置信息 client : Eureka Client客户端特性配置 server : Eureka Server注册中心特性配置 dashboard : Eureka Server注册中心仪表盘配置 Eureka ...
  • 在使用eureka注册服务的时候,需要配置instance下面的字段,如果对这些字段的含义不了解,配置过程中就会出现一些问题,或者想改变注册中心的服务实例的显示格式等等。主要说明一下,几种配置的含义,以及不同内网,...
  • eureka配置修改

    2017-07-21 14:32:29
    配置文件中添加如下配置Eureka服务端的显示如下:
  • eureka配置心跳和剔除不可用服务

    万次阅读 2019-12-13 15:43:37
    1、注意 改配置建议在开发和测试环境下使用,尽量不要在生产环境使用。 2、背景 由于Eureka拥有自我保护机制,当其注册...eureka server配置eureka: server: enable-self-preservation: false #关闭自...
  • SpringCloud 之 Eureka 配置Eureka 集群,Eureka 监听

    千次阅读 多人点赞 2019-06-18 15:29:33
    而系统中的其他微服务,使用 Eureka 的客户端连接到 Eureka Server,并维持心跳连接。这样系统的维护人员就可以通过 Eureka Server 来监控系统中各个微服务是否正常运行。 一、先来搭建一个 Eureka Server 作为注册...
  • 您可能需要在开发过程中直接链接eureka : cd ~ # or your code directory git clone git@github.com:compound-finance/eureka.git cd eureka yarn install yarn link cd ~ /compound-eureka # back to this ...
  • 接着上文介绍完`EurekaInstanceConfig`对于实例的配置后,本文继续介绍对Client客户端的配置接口:`EurekaClientConfig`。他两者将共同为`EurekaClient`的初始化提供基础数据支持。
  • eureka配置账号密码才能访问

    万次阅读 2017-12-12 14:14:58
    如果配置好了eureka server,默认情况下我们就直接直接访问到eureka的界面了。如果不想让所有人都能访问到eureka的界面,可以加上权限认证,输入账号密码才能访问。方式如下:在eureka的server端配置,pom.xml里加上...
  • 本文基于SpringCloud-Dalston.SR5 ...SpringCloud环境下Ribbon+Eureka配置 示例项目 实例项目地址:https://github.com/HashZhang/ScanfoldAll/tree/master/Scanfold-SpringCloud/Scanfold-Sp...
  • eureka配置项明细

    千次阅读 2018-03-15 20:49:00
    Eureka客户端配置 1、RegistryFetchIntervalSeconds 从eureka服务器注册表中获取注册信息的时间间隔(s),默认为30秒 2、InstanceInfoReplicationIntervalSeconds 复制实例变化信息到eureka服务器所需要的时间...
  • 大家对`Spring Cloud`技术体系的使用应该有个感受:配置太多了,真的是多如牛毛啊。这是实话且是现状,因此坊间笑言:现在很多架构师为“配置工程师”或许更为恰当。话“粗”理不“粗”,但这足矣体现了配置对一个...
  • Eureka Client 配置项(eureka.client.*) org.springframework.cloud.netflix.eureka.EurekaClientConfigBean 参数名称 说明 默认值 eureka.client.enabled 用于指示Eureka客户端已启用的...
  • 服务名称 spring.application.name=eureka 服务端口 server.port= ...#=作为服务端的配置=== #关闭自我保护,防止因保护模式而不将挂掉的服务踢出掉 eureka.server.enable-self-preservation=false #eurek...
  • spring cloud eureka配置

    2018-01-27 15:01:49
    Spring Cloud中,Eureka常见问题总结。 指定Eureka的Environment eureka.environment: 指定环境 参考文档:https://github.com/Netflix/eureka/wiki/Configuring-Eureka 指定Eureka的DataCenter eureka....
  • Spring Cloud服务发现框架Eureka配置

    万次阅读 2018-03-17 10:51:57
    在 SpringCloud 之中使用了大量的Netflix 的开源项目,而其中 Eureka 就属于Netflix 提供的发现...Eureka服务端配置:1、在pom.xml追加相应的依赖支持库,这里新建的是一个maven新项目&lt;dependency&gt; ...
  • springcloud之eureka配置——eureka.instance

    万次阅读 2017-08-14 14:14:48
    1.在springcloud中服务的 Instance ID 默认值是: ${spring.cloud.client.hostname}:${spring.application.name}:${spring.application.instance_id:${server.port}}, 也就是:主机名:应用名:应用...eureka.ins
  • 一下是springcloud和eureka配置 ``` <groupId>org.springframework.cloud <artifactId>spring-cloud-dependencies <version>Finchley.M9 <type>pom <scope>import <spring-cloud.version>...
  • 本篇内容用来说明Eureka 常用配置的含义。 以下配置都是以 eureka.server 开头: 参数 描述 备注 eureka.server.eviction-interval-timer-in-ms server清理无效节点的时间间隔 默认60秒 eureka.server....

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 83,228
精华内容 33,291
关键字:

eureka配置