Eureka
配置环境:
【服务端】第一步:配制导入依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka-server</artifactId>
<version>1.4.6.RELEASE</version>
</dependency>
【服务端】第二步:配置properties或xml
server:
port: 7001
#Eureka 配置
eureka:
instance:
hostname: localhost #Eureka服务端的实例名称
client:
register-with-eureka: false #表示是否向Eureka注册中心注册自己
fetch-registry: false #false:表示自己为注册中心
service-url: # 监控页面的配置
defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
【服务端】 第三步: 在启动类中开启EurekaServer功能
@SpringBootApplication
@EnableEurekaServer //服务端的启动类,可以
public class EurekaServerApplication {
public static void main(String[] args) {
SpringApplication.run(EurekaServerApplication.class,args);
}
}
Service
【服务注册端】 第一步:导入依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka</artifactId>
<version>1.4.6.RELEASE</version>
</dependency>
【服务注册端】 第二步:进行配置
#Eureka 配置 : 服务注册到哪里
eureka:
client:
service-url: #服务注册的地址
defaultZone: http://localhost:7001/eureka/
instance: #这个instance并不重要
instance-id: springcloud-provider-dept:8081 #修改监控页面上的默认描述信息
#info配置 配置后可在监控页查看到注册服务端的信息
info:
app.name:
【服务注册端】 第三步:启动类开启Eureka服务注册端功能
@SpringBootApplication
@EnableEurekaClient //在服务启动后,自动注册到Eureka中
@EnableDiscoveryClient //服务发现,并不必须
public class MobilefxrApplication {
public static void main(String[] args) {
SpringApplication.run(MobilefxrApplication.class, args);
}
}
Eureka监控页面
自我保护机制:
上图红色为进入Eureka自我保护机制中,因为服务注册端端口掉线了。
短时间内,会保存服务信息,不会删除。
宁可保留错误的服务注册信息,也不会盲目的注销任何可能健康的服务实例,好死不如赖活着。
让Eureka集群更加的健壮
在SpringCloud中,可以使用配置启用保护机制,但是并不推荐这么做
集群配置:
需要更改yml里面的配置信息,需要更改的字段为:
eureka.client.service-url.defaultZone= 其他集群的地址,多个关联用,
分割
#Eureka 配置
eureka:
instance:
hostname: eureka7002.com #Eureka服务端的实例名称
client:
register-with-eureka: false #表示是否向Eureka注册中心注册自己
fetch-registry: false #false:表示自己为注册中心
service-url: # 监控页面的配置
# 单机情况下的配置↓ 配置一个即可
# defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
# 集群情况下的配置↓(关联) 多个关联使用','连接
defaultZone: http://eureka7001.com:7001/eureka/,http://eureka7003.com:7003/eureka/
此外服务提供者注册服务时,同样需要把服务注册到集群中的所有Eureka上
#Eureka 配置 : 服务注册到哪里
eureka:
client:
service-url:
defaultZone: http://eureka7001.com:7001/eureka/,http://eureka7002.com:7002/eureka/,http://eureka7003.com:7003/eureka/
配置成功后,连接一个Eureka监控页面即可查看关联信息
Eureka 和 Zookeeper 的区别
回顾两大类型数据库原则
关系型数据库:ACID原则
A 原子性 C 一致性 I 隔离性 D 持久性
非关系型数据库: CAP原则
C 强一致性 A 可用性 P 分区容错性
CAP 的三进二 CA、 AP 、 CP
一个分布式项目不能同时满足CAP三个特性、最多只能一次实现两个原则
P
在分布式项目是必须的
Zookeeper 保证的 CP
Eureka 保证的是 AP
Zookeeper
强一致性保证了数据一致性的安全,但是如果leader宕机需要重新选举leader,这个过程大概需要30s~120s,导致会出现漫长的注册时间。
Eureka
各个节点都是平等的,不存在leader 只要有一台Eureka,就能保证注册服务的可用性,如果15分钟内85%的节点都没有正常的心跳,那么Eureka就认为客户端与注册中心出现了网络故障,此时会出现以下几种情况:
1、Eureka不再从注册列表中移除因为长时间没有收到心跳而过期的服务
2、Eureka仍然能够接收新服务的注册和查询请求,但是不会被同步到其他节点上(只保证当前节点依然可用)
3、当网络稳定时,当前实例新的注册信息会被同步到其他节点中
因此,Eureka可以很好的处理网络故障导致部分节点失去联系的情况,而不会像Zookeeper那样整个注册中心瘫痪