Spring Cloud Eureka
注册中心
注册中心作用的主要作用是提供服务的信息给服务消费者,不进行服务调用请求的代理。
注册的东西就是服务信息
Spring Cloud Eureka
eureka含义:找到了!有了!(用作注册中心的语义很合适)
两个重要角色
-
Eureka Server:注册中心,提供服务信息给服务消费者。
-
Eureka Client:服务消费者,调用注册中心上的服务。
Eureka Server:Eureka Server同时也承担Eureka Client角色,也就是说为了保证高可用状态,Eureka Server也需要向其他Eureka Server进行注册,其目的是为了将保证服务信息数据的一致性。单个注册中心环境小,可以取消向注册中心进行注册,因为单个情况下,自己就不需要向自己注册了
配置
依赖
版本依赖:
- Spring Boot:2.0.3.RELEASE
- Spring Cloud:Finchley.RELEASE
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
单机配置
eureka:
client:
register-with-eureka: false # 默认是true,向注册中心进行注册,由于是单实例取消掉
fetch-registry: false # 默认是true,更新服务注册信息,由于是单实例取消掉
service-url: # 注册中心地址,注意填写defaultZone
defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka
instance:
prefer-ip-address: false
hostname: eurekaStandalone
# 配置完毕之后在启动类上添加注解@EnableEurekaServer
域名eurakeStandalone需要在host文件中添加,之所以使用hostname是为了在高可用情况下,正确显示分片信息,具体参考为什么所有的节点都出现在不可用分片
双机配置
# 实例eureka8080
spring:
application:
name: register-center-server
server:
port: 8080
eureka:
client:
service-url:
defaultZone: http://eureka8081:8081/eureka #向其他注册中心注册
register-with-eureka: true
fetch-registry: true
instance:
prefer-ip-address: false #取消ip地址显示,为修改不可用分片
hostname: eureka8080 # 设置hostname,为修改不可用分片
# 配置完毕之后在启动类上添加注解@EnableEurekaServer
# 实例eureka8081
spring:
application:
name: register-center-server
server:
port: 8081
eureka:
client:
service-url:
defaultZone: http://eureka8080:8080/eureka #向其他注册中心注册
register-with-eureka: true
fetch-registry: true
instance:
prefer-ip-address: false #取消ip地址显示,为修改不可用分片
hostname: eureka8081 # 设置hostname,为修改不可用分片
# 配置完毕之后在启动类上添加注解@EnableEurekaServer
三机配置
三机配置我采用的依然是两两配置方式
# 实例eureka8080
spring:
application:
name: register-center-server
server:
port: 8080
eureka:
client:
service-url:
defaultZone: http://eureka8081:8081/eureka,http://eureka8082:8082/eureka
register-with-eureka: true
fetch-registry: true
instance:
prefer-ip-address: false
hostname: eureka8080
# 设置实例名字,简化显示名字
instance-id: ${spring.application.name}:${server.port} # 手动指定application名字
# 配置完毕之后在启动类上添加注解@EnableEurekaServer
spring:
application:
name: register-center-server
server:
port: 8081
eureka:
client:
service-url:
defaultZone: http://eureka8080:8080/eureka,http://eureka8082:8082/eureka
register-with-eureka: true
fetch-registry: true
instance:
prefer-ip-address: false
hostname: eureka8081
# 设置实例名字,简化显示名字
instance-id: ${spring.application.name}:${server.port}
# 配置完毕之后在启动类上添加注解@EnableEurekaServer
spring:
application:
name: register-center-server
server:
port: 8082
eureka:
client:
service-url:
defaultZone: http://eureka8081:8081/eureka,http://eureka8080:8080/eureka
register-with-eureka: true
fetch-registry: true
instance:
prefer-ip-address: false
hostname: eureka8082
# 设置实例名字,简化显示名字
instance-id: ${spring.application.name}:${server.port}
# 配置完毕之后在启动类上添加注解@EnableEurekaServer
问题
- 为什么所有的节点都出现在不可用分片
答:参考资料
- 手动挂掉注册中心节点,为什么被关掉的注册中心节点没有出现在不可用分片中
答:会出现,出现自我保护模式时,不会剔除任何节点,等待一段时间将会正常剔除失效的注册中心和服务。
- 什么是保护模式?
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将会进入自我保护模式。进入自我保护模式之后Eureka注册中心将会停止剔除所有失效的服务节点,直到以下两种情况发生,自我保护模式才会取消:1. 心跳续订次数回到期待的阈值之上。 2. 自我保护模式被禁用。
- 关闭服务提供者,会自动从列表中清除吗?
答:会自动从服务列表中清除。
- Eureka Client的server-url可以只填写部分注册中心地址吗?没有填写的注册中心是不是没有这个服务?
答:可以。这样的话只填写部分的注册中心地址。没有被填写到的注册中心,依然有该Eureka Client服务,因为Eureka Server 内部会更新彼此的注册中心,从而达到数据一致性。但是为了保证服务的高可用,我们都将服务注册到全部注册节点。
- 注册中心挂了,服务消费者还可以调用服务吗?
答:可以,由于服务消费者本地会保留注册中的的服务注册表,所以在注册中心出现故障时,客户端仍然可以使用本地缓存的服务注册表进行服务的查询。
本文深入探讨SpringCloud Eureka作为注册中心的核心概念,包括其架构、配置及高可用部署策略。解析EurekaServer与EurekaClient的角色,阐述单机、双机及三机配置细节,以及自我保护模式等关键特性。
1898

被折叠的 条评论
为什么被折叠?



