eureka简介
Eureka是Netflix开发的一个Service Discovery组件,spring cloud将其整合用来做服务注册中心,Eureka包括两部分Eureka Server 和 Eureka Client
- Eureka Server:服务注册中心,治理注册到eureka server的服务
- Eureka Client:用来和eureka server交互,注册服务
Eureka中有下面几种概念:
- 同步:
- 续约:
- 续租:
- 自我保护:
Eureka采用了AP,保证了eureka server集群的高可用性
CAP理论指的是一个分布式系统最多只能同时满足一致性(Consistency)、可用性(Availability)和分区容错性(Partition tolerance)这三项中的两项。
eureka Standalone Mode
eureka的单机模式,在pom引入spring-cloud-starter-netflix-eureka-server
依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
在application.yml做如下配置
eureka:
instance:
hostname: localhost
client:
#不注册自己到eureka serve
registerWithEureka: false
#不提取注册中心的消息
fetchRegistry: false
serviceUrl:
defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
启动eureka一段时间后,如果没有服务注册,会有提示
EMERGENCY! EUREKA MAY BE INCORRECTLY CLAIMING INSTANCES ARE UP WHEN THEY'RE NOT. RENEWALS ARE LESSER THAN THRESHOLD AND HENCE THE INSTANCES ARE NOT BEING EXPIRED JUST TO BE SAFE.
这表明eureka进入自我保护机制,可以配置开启还是关闭。
eureka cluster
eureka的集群模式,在pom引入spring-cloud-starter-netflix-eureka-server
依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
搭建eureka集群时为了便于区分不同的节点,在hosts文件中做如下映射
# eureka erver
127.0.0.1 eureka-7901
127.0.0.1 eureka-7902
127.0.0.1 eureka-7903
在application.yml做如下配置
spring:
application:
name: eureka-cluster
---
spring:
profiles: eureka-7901
server:
port: 7901
eureka:
instance:
hostname: eureka-7901
lease-renewal-interval-in-seconds: 30
lease-expiration-duration-in-seconds: 90
client:
fetch-registry: true
register-with-eureka: true
service-url:
defaultZone: http://eureka-7902:7902/eureka/,http://eureka-7903:7903/eureka/
server:
enable-self-preservation: true
eviction-interval-timer-in-ms: 6000
---
spring:
profiles: eureka-7902
server:
port: 7902
eureka:
instance:
hostname: eureka-7902
lease-renewal-interval-in-seconds: 30
lease-expiration-duration-in-seconds: 90
client:
fetch-registry: true
register-with-eureka: true
service-url:
defaultZone: http://eureka-7901:7901/eureka/,http://eureka-7903:7903/eureka/
server:
enable-self-preservation: true
eviction-interval-timer-in-ms: 6000
---
spring:
profiles: eureka-7903
server:
port: 7903
eureka:
instance:
hostname: eureka-7903
lease-renewal-interval-in-seconds: 30
lease-expiration-duration-in-seconds: 90
client:
fetch-registry: true
register-with-eureka: true
service-url:
defaultZone: http://eureka-7901:7901/eureka/,http://eureka-7902:7902/eureka/
server:
enable-self-preservation: true
eviction-interval-timer-in-ms: 6000
在idea中启动时,指定启动参数
注意:两个配置启动参数的地方配置一个就可以了
启动ar包可以使用命令
java -jar eureka-server.jar --spring.profiles.active=eureka-7901
在application.yml中register-with-eureka: true
将自身注册为eureka server,在defdeaultZone
中指定其余eureka server指定除自己外的所有节点,互相注册,每个节点在启动过程中会去请求连接其他节点,因此在初始启动阶段会报错,等所有节点启动稳定后,就会相互注册。
访问http://eureka-7901:7901,可以看到eureka-7901中注册了eureka-7902,eureka-7903,表明互相注册成功