写在前面
因为想要记录学习spring cloud时关键组件的关键知识,以作回望,加深印象。
概述
Eureka是spring cloud中提供的服务注册中心组件,用于注册并管理微服务,并协调微服务间的交互访问。
服务端eureka server
简单使用
引入依赖
<!--核心依赖-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka-server</artifactId>
</dependency>
启动类使用 @EnableEurekaServer 注解启用Eureka,以此将微服务启用为ereka服务器端
@SpringBootApplication
@EnableEurekaServer
public class EurekaApplication {
public static void main(String[] args) {
new SpringApplicationBuilder(EurekaApplication.class).web(true).run(args);
}
}
作为服务端,常用的其他服务端配置
eureka:
#此处设置会改变eureka控制台的显示,类似于节点备注,区分服务部署环境
datacenter: cloud
#此处设置会改变eureka控制台的显示,类似于节点备注,区分生产还是测试
environment: prod
#仪表盘配置
dashboard:
#控制台访问路径,默认只需要IP:port
path: /dashboard
#是否启用控制台
enabled: true
instance:
#实例主机名
hostname: localhost
#作为服务器端配置
server:
#是否开启自我保护机制,服务器默认开启自我保护机制,开启自我保护模式后,过期的实例将不会被清理
enable-self-preservation: false
#服务器会每隔60s清理一次租约过期的服务,可以在服务端设置每次清理失效服务的时间间隔
eviction-interval-timer-in-ms: 5000
#作为客户端配置(对于eureka-server模块本身为“自注册”)
client:
#是否注册到eureka注册中心
register-with-eureka: true
#s是否从其他eureka服务器节点获取注册信息
fetch-registry: false
#在自我保护机制下,每当有一个新的服务注册上来时,Renews threshold(阈值)都会相应增加
#而过期实例被清理后,Renews threshold却不会立即更新减小,服务器默认15*60*1000毫秒(15分钟)更新一次,可以在服务器端配置更新周期
renewal-threshold-update-interval-ms: 60000
#阈值=应收到心跳总次数*0.85,系数0.85可以在服务器配置
renewal-percent-threshold: 0.85
#要注册到哪个eureka-server上
serviceUrl:
defaultZone: http://user:password@127.0.0.1:8761/eureka
使用security
使用security为服务端提供安全校验,这样客户端连接到注册中心时,需要使用账号密码验证。
引入依赖
<!--security可以为服务器端设置账号密码-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
yaml配置
security:
user:
name: user
password: password
eureka server的自我保护机制
待补充(Renews threshold)
客户端 eureka client
引入依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka</artifactId>
</dependency>
启动类使用 @EnableDiscoveryClient 注解启用Eureka,以此将微服务启用为ereka服务器端
@SpringBootApplication
@EnableDiscoveryClient
public class ConsumerApplication {
public static void main(String[] args) {
new SpringApplicationBuilder(ConsumerApplication.class).web(true).run(args);
}
}
作为客户端,常用的yaml配置
eureka:
#此处设置会改变eureka控制台的显示,类似于节点备注,区分服务部署环境
datacenter: cloud
#此处设置会改变eureka控制台的显示,类似于节点备注,区分生产还是测试
environment: prod
#仪表盘配置
dashboard:
#控制台访问路径,默认只需要IP:port
path: /dashboard
#是否启用控制台
enabled: true
instance:
#实例主机名,作为客户端可以指定自己的主机名称,不指定的话,服务器默认使用IP地址
hostname: localhost
prefer-ip-address: false
#当服务作为客户端注册到服务器上时,客户端会默认拼接【主机】+【应用名】+【端口】作为服务唯一ID,客户端可以自定义在服务器上的ID,不可重复
instance-id: client-app
#客户端默认每隔30s向指定的服务器发送续约请求(使用服务器端的renew函数?),可以自己定义每次发送心跳的间隔(租约时效)
lease-renewal-interval-in-seconds: 60
#服务器默认90s内没有收到客户端的续约请求,便会认定客户端服务租约过期,客户端可以自定义租约过期时间
lease-expiration-duration-in-seconds: 60
#作为客户端配置(对于eureka-server模块本身为“自注册”)
client:
#要注册到哪个eureka-server上,eureka使用security时
serviceUrl:
defaultZone: http://user:password@127.0.0.1:8761/eureka
#是否注册到eureka注册中心
register-with-eureka: true
#s是否从其他eureka服务器节点获取注册信息,默认true
fetch-registry: false
#从eureka服务器注册表中获取注册信息的时间间隔(s),默认为30秒
registry-fetch-interval-seconds: 30
#复制实例变化信息到eureka服务器所需要的时间间隔(s),默认为30秒
instance-info-replication-interval-seconds: 30
#询问Eureka服务url信息变化的时间间隔(s),默认为300秒(5分钟)
eureka-service-url-poll-interval-seconds: 300
#最初复制实例信息到eureka服务器所需的时间(s),默认为40秒
initial-instance-info-replication-interval-seconds: 40
#eureka注册表的内容是否被压缩,默认为true,并且是在最好的网络流量下被压缩
g-zip-content: true
#eureka需要超时读取之前需要等待的时间,默认为8秒
eureka-server-read-timeout-seconds: 8
#eureka需要超时连接之前需要等待的时间,默认为5秒
eureka-server-connect-timeout-seconds: 5
#eureka客户端允许所有eureka服务器连接的总数目,默认是200
eureka-server-total-connections: 200
#eureka客户端允许eureka服务器主机连接的总数目,默认是50
eureka-server-total-connections-per-host: 50
#心跳执行程序线程池的大小,默认为5
heartbeat-executor-thread-pool-size: 5
#心跳执行程序回退相关的属性,是重试延迟的最大倍数值,默认为10
heartbeat-executor-exponential-back-off-bound: 10
#执行程序缓存刷新线程池的大小,默认为5
cache-refresh-executor-thread-pool-size: 5
#执行程序指数回退刷新的相关属性,是重试延迟的最大倍数值,默认为10
cache-refresh-executor-exponential-back-off-bound: 10
补充:
- eureka.instance.home-page-url-path
用于告诉eureka server当前实例的context绝对路径,默认为/,与server.context-path保持一致 - eureka.instance.home-page-url
与home-page-url-path不同的是,home-page-url为相对路径