介绍
Eureka是Netflix开发的服务发现框架,是一个基于REST的服务。主要以AWS云服务为支撑,提供服务发现并实现负载均衡和故障转移。SpringCloud将它集成在其子项目spring-cloud-netflix中,以实现SpringCloud的服务发现功能。Eureka服务器节点之间是对等的,只要有一个节点在,就可以正常提供服务。Eureka客户端的所有操作可能需要一段时间才能在Eureka服务器中反映出来,随后在其他Eureka客户端中反映出来。也就是说,客户端获取到的注册信息可能不是最新的,它并不保证强一致性,保证的是可用性以及分区容错性,即CAP中保证的是AP。
Eureka单服务搭建
服务端(注册中心)
1.引入依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
2.启动类中添加注解
@EnableEurekaServer
@SpringBootApplication
public class EurekaApplication {
private static final Logger LOGGER = LoggerFactory.getLogger(EurekaApplication.class);
public static void main(String[] args) {
SpringApplication.run(EurekaApplication.class, args);
LOGGER.info("================ erueka start success ==============");
}
}
3.维护配置文件
spring:
application:
name: eureka
server:
port: 8000
eureka:
instance:
hostname: localhost
lease-renewal-interval-in-seconds: 10 #eureka客户端多长时间发送心跳到服务器,以表明它仍然活着。指定的时间内没有收到心跳,eureka服务器将删除实例
client:
registerWithEureka: false #是否注册自己
fetchRegistry: false #是否拉取别的注册中心的信息
serviceUrl:
defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/ #注册中心地址
registry-fetch-interval-seconds: 10 #客户端拉取服务端的频率
server:
wait-time-in-ms-when-sync-empty: 0 #同步为空时的等待时间(以毫秒为单位)
enable-self-preservation: false # 启动自我保护
eviction-interval-timer-in-ms: 5000 #针对客户端下线没有通知服务端的问题通过提高EvictionTask的调度频率解决
use-read-only-response-cache: false #针对response cache问题可以关闭readOnlyCacheMap
response-cache-auto-expiration-in-seconds: 60 #针对response cache问题也可以通过调整缓存过期时间解决
renewal-percent-threshold: 0.49 #续约阈值 指定每分钟收到的续约次数的阈值低于阈值时触发服务保护self-preservation
客户端(需要注册到注册中心的服务)
1.引入依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
2.启动类中添加注解
@EnableEurekaClient
@SpringBootApplication
public class EurekaClientApplication {
private static final Logger LOGGER = LoggerFactory.getLogger(EurekaClientApplication.class);
public static void main(String[] args) {
SpringApplication.run(EurekaClientApplication.class, args);
LOGGER.info("================ erueka client start success ==============");
}
}
3.维护配置文件
spring:
application:
name: eurekaClient
server:
port: 8001
eureka:
client:
serviceUrl:
defaultZone: http://localhost:8000/eureka/ #配置中心地址