介绍
Spring Cloud Eureka是Spring Cloud Netflix微服务套件中的一部分, 基于Netflix Eureka做二次封装, 主要负责完成微服务架构中的服务治理服务功能.Spring Cloud 通过为Eureka增加Spring Boot 风格的自动化配置,我们只需要简单的引入依赖和注解配置就能让Spring Boot构建的微服务应用轻松的与Eureka服务治理体系进行整合.
在Eureka的服务治理体系中, 主要分为服务端和客户端两个不同的角色, 服务端为服务注册中心, 而客户端为各个提供接口的微服务应用.
Eureka客户端配置主要分为一下两个方面
- 服务注册相关的信息, 包括服务注册中心地址、服务获取的间隔时间、可用区域等
- 服务实例相关的配置信息, 包括服务实例的名称、IP地址、端口号、健康检查路径等
Eureka服务端更多的类似于一个现成产品, 大多数情况下我们不需要修改它的配置信息.
服务端的配置定义主要在org.springframework.cloud.netflix.eureka.server.EurekaServerConfigBean
中, 这些参数均以 eureka.server
作为前缀.
@ConfigurationProperties("eureka.server")
public class EurekaServerConfigBean implements EurekaServerConfig {
public static final String PREFIX = "eureka.server";
...
}
依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
服务注册类配置
服务注册类的配置信息在org.springframework.cloud.netflix.eureka.EurekaClientConfigBean
中定义, 配置信息都以 eureka.client
为前缀.
@ConfigurationProperties("eureka.client")
public class EurekaClientConfigBean implements EurekaClientConfig, Ordered {
public static final String PREFIX = "eureka.client";
public static final String DEFAULT_URL = "http://localhost:8761/eureka/";
public static final String DEFAULT_ZONE = "defaultZone";
...
}
依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
eureka.client.service-url
指定注册中心地址
配参数的配置存储在HashMap中, 并且设置有一组默认值, 默认值的key为defaultZone
、value为 http://localhost:8761/eureka/
private Map<String, String> serviceUrl = new HashMap();
public static final String DEFAULT_URL = "http://localhost:8761/eureka/";
public static final String DEFAULT_ZONE = "defaultZone";
- 多个注册中心配置可以用逗号分隔
eureka.client.service-url.defaultZone=http://localhost:8761/eureka/,http://localhost:8762/eureka/....
- 加入安全校验
http://<username>:<password>@localhost:8761/eureka
<username>: 用户名
<password>: 密码
其他配置
一下配置均以eureka.client
为前缀
参数名 | 说明 | 默认值 |
---|---|---|
enabled | 启用Eureka客户端 | true |
registryFetchIntervalSeconds | 从Eureka服务端获取注册信息的间隔时间,单位为秒 | 30 |
instanceInfoReplicationIntervalSeconds | 更新实例信息的变化到Eureka服务端的间隔时间, 单位为秒 | 30 |
initialInstanceInfoReplicationIntervalSeconds | 初始化实例信息到Eureka服务端的间隔时间, 单位为秒 | 40 |
eurekaServiceUrlPollIntervalSeconds | 轮询Eureka服务端地址更改的间隔时间,单位为秒.当我们于Spring Cloud Config配合,动态刷新Eureka的serverUrl地址时需要关注该参数 | 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、实例端口等用于服务治理的重要信息;以及一些用于负载均衡策略或是其他特殊用途的自定义元数据信息.
- Spring Cloud Eureka在进行服务注册的时候,会包装成
com.netflix.appinfo.InstanceInfo
对象发送给服务端.
其中metadata
为自定义元数据, 其他的成员变量则是标准化的元数据信息. 可以通过eureka.instance.<properties>=<value>
的格式标准化元数据直接配置,其中就是EurekaInstanceConfigBean对象中的成员变量名. 对于自定义元数据, 可以通过 eureka.instance.metadataMap.<key>=<value>
的格式来进行配置.
@XStreamAlias("metadata")
private volatile Map<String, String> metadata = new ConcurrentHashMap();
eureka.instance.metadataMap.zone=xian
- 实例名配置
在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}
- 端点配置
在InstanceInfo中存在一些URL的配置, 比如 homePageUrl, statusPageUrl, healthCheckUrl, 分别代表应用的主页url, 状态页url, 健康检查url. 状态和健康检查使用了spring-boot-actuator
模块提供的/info
和 /health
必须确保/health
在发送元数据的时候能被注册中心访问到, 否则注册中心不会根据应用的健康检查来更改状态(仅当开启了healthcheck功能),而/info
如果不正确, 会导致在Eureka面板中单击服务实例时,无法访问到服务实例提供的信息接口.
由于Eureka的服务注册中心默认以HTTP的方式来访问和暴漏断电, 当使用HTTPS时, 应该使用绝对路径配置
erueka.instance.statusPageUrl=https://...../info
eureka.instance.healthCheckUrl=https://...../health
eureka.instance.homePageUrl=https://.../
- 其他配置
参数名 | 说明 | 默认值 |
---|---|---|
preferIpAddress | 是否优先使用IP地址作为主机名标识 | false |
leaseRenewalIntervalInSeconds | Eureka客户端向服务端发送心跳间隔时间, 单位为秒 | 30 |
leaseExpirationDurationInSeconds | Eureka服务端在收到最后一次心跳之后等待的时间上限,单位为秒.超过时间之后服务端会将该服务实例从服务清单中剔除,从而禁止服务调用请求被发送到该实例上 | 90 |
nonSecurePort | 非安全通信端口 | 80 |
securePort | 安全通信端口 | 443 |
nonSecurePortEnabled | 是否启用非安全通信端口 | true |
securePortEnabled | 是否启用安全通信端口 | |
appname | 服务名称, 默认取spring.application.name的配置值,如果没有则为unknown | unknown |
hostname | 主机名,不配置的时候根据操作系统的主机名获取 |
参考书籍 << Spring Cloud 微服务实战 >>
本文由 anybbo 创作,采用 知识共享署名4.0
国际许可协议进行许可
本站文章除注明转载/出处外,均为本站原创或翻译,转载前请务必署名
最后编辑时间为: Dec 17,2020