Eureka简介
Eureka 是 Netflix 出品的用于实现服务注册和发现的工具,Spring Cloud 封装了 Netflix 公司开发的 Eureka 模块来实现服务注册和发现。
CAP理论指出,一个分布式系统不可能同时满足C(一致性)、A(可用性)和P(分区容错性)。由于分区容错性P在是分布式系统中必须要保证的,因此我们只能在A和C之间进行权衡。
Eureka保证CP,Eureka各个节点都是平等的,几个节点挂掉不会影响正常节点的工作,剩余的节点依然可以提供注册和查询服务。而Eureka的客户端在向某个Eureka注册或时如果发现连接失败,则会自动切换至其它节点,只要有一台Eureka还在,就能保证注册服务可用(保证可用性),只不过查到的信息可能不是最新的(不保证强一致性)
单机环境搭建
1.引入依赖,特别要注意Spring Boot 和Spring Cloud的版本要对应
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bootstrap</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
2.添加注解 @EnableEurekaServer
@EnableEurekaServer
@SpringBootApplication
public class EurekaStudyApplication {
public static void main(String[] args) {
SpringApplication.run(EurekaStudyApplication.class, args);
}
}
3.配置application.yml和bootstrap.yml文件
# 配置bootstrap.yml
spring:
application:
name: register
server:
port: 8007
management:
server:
port: 8001
# 配置application.yml
eureka:
instance:
preferIpAddress: true # true将IP注册到Eureka Server上,否则为机器的主机名
leaseRenewalIntervalInSeconds: 10 #Eureka客户需要多长时间发送心跳给eureka服务器,表明它仍然活着,默认为30 秒
leaseExpirationDurationInSeconds: 30 #Eureka服务器在接收到实例的最后一次发出的心跳后,需要等待多久才可以将此实例删除,默认为90秒
metadata-map: #自定义元数据
VERSION: 0.9.0
client:
register-with-eureka: false # 实例是否在Eureka服务器上注册自己的信息以供其他服务发现,默认为true
fetch-registry: false #表示是否从EurekaServer获取注册信息,默认为true,表示需要从其他server同步信息
serviceUrl:
defaultZone: ${EUREKA_DEFAULT_ZONE:http://dev.xxx.com:8007/eureka}
registryFetchIntervalSeconds: 10 #从Eureka服务器注册表中获取注册信息的时间间隔(s),默认为30秒
disable-delta: true
server:
evictionIntervalTimerInMs: 4000 #过期实例应该启动并运行的时间间隔,单位为毫秒,默认为60 * 1000
enable-self-preservation: false #自我保护机制