码迷,mamicode.com
首页 > 编程语言 > 详细

基于Spring Cloud的微服务构建学习-3 Spring Cloud Eureka配置详解

时间:2017-08-17 14:30:04      阅读:934      评论:0      收藏:0      [点我收藏+]

标签:方式   table   gis   实例名   默认   lan   one   分类   其他   

配置详解

在Eureka的服务治理体系中,主要分为服务端与客户端。服务端为服务注册中心,而客户端为各个提供接口的微服务应用。当部署高可用注册中心时,每个服务端也已经成为了客户端,因此,在使用Spring Cloud Eureka的过程中,我们所做的配置内容几乎都是对Eureka客户端配置进行的操作,所以了解这部分的配置内容,对于用好Eureka非常有帮助。
而Eureka服务端更多类似于一个现成产品,大多数情况下,我们不需要修改它的配置信息。

Eureka客户端配置分类

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

服务注册类配置

关于服务注册类的配置信息,我们可以通过查看org.springframework.cloud.netflix.eureka.EurekaClientConfig的源码来获得比官方文档中更为详尽的内容。这些配置信息都已eureka.client为前缀。

指定注册中心

指定注册中心主要通过eureka.client.serviceUrl参数实现。
如果我们构建了高可用注册中心集群时,我们可以为参数的value值配置多个注册中心的地址。例如:

eureka.client.serviceUrl.defaultZone=http://peer1:1111/eureka,http://peer2:1112/eureka/

为了服务注册中心的安全考虑,很多时候我们都会为服务注册中心加入安全校验。这个时候,在配置serviceUrl时,需要在value值得URL中加入相应的安全校验信息,比如:
http://<username>:<password>@localhost:1111/eureka

其他常用配置

这些常用配置均已eureka.client为前缀

参数名说明默认值
enabled 启用Eureka客户端 true
registryFetchIntervalSeconds 从Eureka服务端获取注册信息的间隔时间,单位为秒 30
instanceInfoReplicationIntervalSeconds 更新实例信息的变化到Eureka服务端的间隔时间,单位为秒 30
initialInstanceInfoReplicationIntervalSeconds 初始化实例信息到Eureka服务端的间隔时间,单位为秒 40
eurekaServiceUrlPollIntervalSeconds 轮询Eureka服务端地址更改的间隔时间,单位为秒。当我们与Spring CLoud Config整合,动态刷新Eureka的serviceURL地址时需要关注该参数 300
eurekaServerReadTimeoutSeconds 读取Eureka Server信息的超时时间,单位为秒 8
eurekaServerConnectTimeoutSeconds 链接Eureka Server的超时时间,单位为秒 5
eurekaServerTotalConnections 从Eureka客户端到所有Eureka服务端的连接总数 200
eurekaServerTotalConnectionsPerHost 从Eureka客户端到每个Eureka服务端主机的连接总数 50
eurekaConnectionIdleTimeoutSeconds Eureka服务端连接的空闲关闭时间,单位为秒 30
heartbeatExecutorThreadPoolSize 心跳连接池的初始化线程数 2
heartbeatExecutorExponentialBackOffBound 心跳超时重试延迟时间的最大乘数值 10
cacheRefreshExecutorThreadPoolSize 缓存刷新线程池的初始化线程数 2
cacheRefreshExecutorExponentialBackOffBound 缓存刷新重试延迟时间的最大乘数值 10
useDnsForFetchingServiceUrls 使用DNS来获取Eureka服务端的serviceUrl false
registerWithEureka 是否要将自身的实例信息注册到Eureka服务端 true
preferSameZoneEureka 是否偏好使用处于相同Zone的Eureka服务端 true
filterOnlyUpInstances 获取实例时是否过滤,仅保留UP状态的实例 true
fetchRegistry 是否从Eureka服务端获取注册信息 true

服务实例类配置

关于服务实例类配置信息,我们可以通过查看org.springframework.cloud.netflix.eureka.EurekaInstanceConfigBean的源码来获取详细内容,这些配置信息都以eureka.instance为前缀。

元数据

元数据是Eureka客户端在想服务注册中心发送注册请求时,用来描述自身服务信息的对象,其中包含了一些标准化的元数据,比如服务名称、实例名称、实例IP、实例端口等用于服务治理的重要信息;以及一些用于负载均衡策略或是其他特殊用途的自定义元数据信息。
我们可以通过eureka.instance.<properties>=<value>的格式对标准化元数据直接进行配置,其中properties就是EurekaInstanceConfigBean对象中的成员变量名。而对于自定义元数据,可以通过eureka.instance.metadataMap.<key>=<value>的格式来进行配置,比如:

eureka.instance.metadataMap.zone=shanghai

实例名配置

InstanceInfo中的instanceId参数,它是区分同一服务中不同实例的唯一标识。在Netflix Eureka的原生实现中,实例名采用主机名作为默认值,这样会使得在同一
主机上无法启动多个相同的服务实例。所以,在Spring Cloud Eureka的配置中,针对统一主机中启动多实例的情况,对实例名的默认命名作了更为合理的扩展,它采用了如下默认规则:

${spring.cloud.client.hostname}:${spring.application.name}:${spring.application.instance_id:${server.port}}

对于实例名的命名规则,我们也可以通过eureka.instance.instanceId参数来进行配。如:

  eureka.instance.instanceId=${spring.application.name}:${random.int}

通过上面的配置,利用应用名加随机数的方式来区分不同的实例,从而实现在统一主机上,不指定端口就能轻松启动多个实例的效果。

端点配置
  • homePageUrl:应用主页的URL
  • statusPageUrl:状态页的URL
  • healthCheckUrl:健康检查的URL
    其中,状态页和健康检查的URL在Spring Cloud Eureka中默认使用了spring-boot-actuator模块提供的/info端点和/health端点。并且这些端点起着很重要的作用

为了服务的正常运作,我们必须确保Eureka客户端的/health端点在发送元数据的时候,是一个能被注册中心访问到的地址,否则服务注册中心不会根据应用的健康检查来更改状态(仅当开启了healthcheck功能时,以该端点信息作为健康检查标准)。而/info端点如果不正确的话,会导致在Eureka面板中单机服务实例时,无法访问到服务实例提供的信息接口。
大多数情况下,我们并不需要修改这几个URL配置。

健康检测

默认情况下,Spring CLoud Eureka中各个服务实例的健康检测并不是通过spring-boot-actuator模块的/health端点来实现的,而是依靠客户端心跳的方式来保持服务实例的存活。因此,默认的心跳方式作为健康检测并不保险。因为不能检测服务是否能有效提供服务。
在Spring Cloud Eureka中,我们可以通过简单的配置,把Eureka客户端的健康检测交给spring-boot-actuator模块的/health端点,以实现更加全面的健康状态维护。
详细步骤如下:

  1. 在pom.xml中引入spring-boot-starter-actuator模块的依赖
    xml
    <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-actuator</artifactId>
    </dependency>
  2. application.properties中增加参数配置eureka.client.healthcheck.enabled=true
其他配置

均以eureka.instance为前缀:

参数名说明默认值
preferIpAddress 是否优先使用IP地址作为主机名的标识 false
leaseRenewalIntervalInSeconds Eureka客户端向服务端发送心跳的时间间隔,单位为秒 30
leaseExpirationDurationInSeconds Eureka服务端在收到最后一次心跳之后等待的时间上限,单位为秒。超过该时间之后服务端会将该服务实例从服务清单中剔除,从而禁止服务调用请求被发送到该实例上 90
nonSecurePort 非安全的通信端口号 80
securePort 安全的通信端口号 443
nonSecurePortEnabled 是否启用非安全的通信端口号 true
securePortEnabled 是否启用安全的通信端口号  
appname 服务名,默认取spring.application.name的配置值,如果没有则为unknown  
hostname 主机名,不配置的时候讲根据操作系统的主机名来获取  

参考文献
spring cloud 微服务实战

基于Spring Cloud的微服务构建学习-3 Spring Cloud Eureka配置详解

标签:方式   table   gis   实例名   默认   lan   one   分类   其他   

原文地址:http://www.cnblogs.com/xiemubg/p/7381055.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!