一、简介
Eureka 是Netflix公司开源的一个服务注册与发现的组件,和其他Netflix 公司的服务组件(例如负载均衡、 熔断器、网关等) 一起,被Spring Cloud 社区整合为Spring Cloud Netflix 模块。 Eureka 是 Netflix 贡献给Spring Cloud的一个框架!
二、常见的注册中心分类
注册中心 | 提供方 | 地址 | |
---|---|---|---|
Consul | Spring | https://spring.io/projects/spring-cloud-consulConsul | |
Eureka | Netflix | https://github.com/Netflix/eureka/wiki | |
Nacos | alibaba | https://nacos.io/zh-cn/ | |
Zookeeper | yahoo |
三、什么是ACP原则
3.1 APC原则
CAP原则又指CAP定理,是指在一个分布式系统中有如下三个原则:
- 一致性 (Consistency)
- 可用性 (Availability)
- 分区容错性 (Partition tolerance)(这个特性是不可避免的)
APC原则指的是,这三个要素只能同时实现其中两点,不可能三者兼顾
3.2 分布式特征
C:数据的一致性,A、B、C里面的数据都是一致性
B:服务的可用性()
P:分区的容错性(在集群里面的机器。因为网络原因,机房的原因。可能导致数据不会同步),他在分布式需要实现的特性
Zookeeper 注重数据的一致性,CP zk(注册中心,配置文件中心,协调中心)
Eureka 注重服务的可用性 AP eureka (注册中心)
四、Eureka快速入门
注意:SpringCloud版本号和Springboot要一一对应上,详细参考官网,这里就不列举了
本文采用了SpringCloud的Hoxton.SR12版本,对应Springboot版本2.3.12.RELEASE
这里我们准备两个服务
Eureka-server 服务端, Eureka-client客户端
4.1 Eureka-server服务端
4.1.1 导入Eureka-server服务端的依赖
<!--Eureka注册中心服务端-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
4.1.2 启动类增加服务端注解
@EnableEurekaServer
4.1.3 修改配置文件
Eureka服务端默认端口是8761
在微服务中我们一般都要给应用起个名字,方便好辨识
4.2 Eureka-client 客户端
4.2.1 导入Euaeka-client客户端的依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
4.2.2 启动类增加客户端注解
@EnableEurekaClient
4.2.3 修改配置文件
server:
port: 8001
spring:
application:
name: erueka-client
eureka:
client:
service-url:
defaultZone: http://localhost:8761/eureka ## 注册到8761注册中心
4.3 访问测试
4.5 注册中心的状态标识
- UP: 服务是上线的,括号里面是具体服务实例的个数,提供服务的最小单元
- DOWN: 服务是下线的
- UN_KONW: 服务的状态未知
4.5.1 服务的实例名称
4.6 常用的配置文件设置
4.6.1 Server中常用的设置
server:
port: 8761
spring:
application:
name: erueka-server
eureka:
server:
enable-self-preservation: true #server 的自我保护机制,避免因为网络原因造成误剔除,生产环境建议打开
renewal-percent-threshold: 0.85 #85%,如果在一个机房的client端,15分钟内有85%的client没有续约,那么则可能是网络原因,认为服务实例没有问题,不会剔除他们,宁可放过一万,不可错杀一个,确保高可用
expected-client-renewal-interval-seconds: 30 #客户端续约时间间隔(秒),用于计算每分钟续约次数
eviction-interval-timer-in-ms: 30000 #清除无效节点的频率(毫秒)--定期删除
client:
service-url: #eureka 服务端和客户端的交互地址,集群用,隔开
defaultZone: http://localhost:8761/eureka/
register-with-eureka: false #是否注册自己(单机eureka一般关闭注册自己,集群注意打开)
fetch-registry: true #是否拉取服务列表
instance:
hostname: localhost #主机名
instance-id: ${eureka.instance.hostname}:${spring.application.name}:${server.port} #实例id
prefer-ip-address: true #是否优先使用ip地址
lease-renewal-interval-in-seconds: 10 #客户端向服务端发送心跳的时间间隔(秒)
lease-expiration-duration-in-seconds: 20 #服务端在收到最后一次心跳后等待时间上限(秒)
4.6.2 Client的常用配置
server:
port: 8001
spring:
application:
name: eureka-client
eureka:
client:
service-url: #eureka服务端和客户端的交互地址,集群用,隔开
defaultZone: http://localhost:8761/eureka
register-with-eureka: true #注册自己
fetch-registry: true #拉取服务列表
registry-fetch-interval-seconds: 5 #表示eureka-client间隔多久去拉取服务注册信息
instance:
hostname: localhost #服务主机名称
instance-id: ${eureka.instance.hostname}:${spring.application.name}:${server.port} #实例id
prefer-ip-address: true #服务列表以ip的形式展示
lease-renewal-interval-in-seconds: 10 #表示eureka client发送心跳给server端的频率
lease-expiration-duration-in-seconds: 20 #表示eureka server至上一次收到client的心跳之后,等待 下一次心跳的超时时间,在这个时间内若没收到下一次心跳,则将移除该实例
结尾: 如果您想要markdown完整版笔记,请您关注下方公众号领取完整笔记一份。期待您的关注~