spring cloud-注册中心(Eureka)

一、服务注册中心组件(*)

markdown 复制代码
定义:服务注册中心就是在整个微服务架构单独抽取一个服务,该服务不做项目中任何业务功能,仅用来在微服务中记录微服务、对微服务进行健康状态检查,及服务元数据信息存储

常用的注册中心:eureka(netflix)、zookeeper(java)、consul(go)、nacos(java阿里巴巴)

eureka:是netflix开发的服务发现框架。包含两个组件, eureka server 和 eureka client

Eureka

eureka server
  • 1.添加依赖
xml 复制代码
<!-- eureka server -->
<dependency>
	<groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
  • 2.在启动类上添加注解@EnableEurekaServer
java 复制代码
@SpringBootApplication
@EnableEurekaServer
public class EurekaServerApplication {
SpringApplication.run(EurekaServerApplication.class, args);

}
  • 3.配置文件
properties 复制代码
# 服务名称
spring.application.name=EUREKA-SERVER
# eureka server端口号,默认8761
server.port=8761
# eureka server服务注册中心地址
eureka.client.service-url.defaultZone=http://localhost:8761/eureka/
  • 未指定服务名称时,启动服务后,在eureka server管理界面中出现UNKNOW的一个未知应用

在微服务架构中服务名称代表服务唯一标识,服务名称必须唯一,通过配置spring.application.name=EUREKA-SERVER指定,推荐服务名称大写(默认大写),服务名不能出现下划线_

  • eureka server启动过程中报错

eureka含有两个组件eureka server、eureka client,当项目中引入eureka server组件依赖时,这个组件会同时将eureka client引入到项目中,因此启动时将自己作为一个服务注册中心启动,同时也会将自己作为服务客户端进行注册,默认启动时立即注册,注册时的服务还没有准备完成,因此会出现当前错误

  • 关闭eureka server 自己注册自己
properties 复制代码
# 关闭eureka client立即注册
eureka.client.fetch-registry=false
# 让当前应用仅仅是服务注册中心,不向eureka server注册
eureka.client.register-with-eureka=false
eureka client

eureka client 就是日后基于业务拆分出来的一个个微服务

  • 1.引入依赖
xml 复制代码
<!-- eureka client-->
<dependency>
	<groupId>org.springframework.cloud</groupId>
	<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
  • 2.在启动类上加注解@EnableEurekaClient
java 复制代码
@SpringBootApplication
@EnableEurekaClient
public class EurekaClientApplication {

}
  • 3.配置文件
properties 复制代码
server.port=8989
# 服务名称
spring.application.name=EUREKA-CLIENT
# eureka server注册中心地址
eureka.client.service-url.defaultZone=http://localhost:8761/eureka/
eureka 自我保护机制

经测试,跟spring cloud版本有关,高版本的会立即清除(如Hoxton.SR8)

1.自我保护机制触发现象

当eureka client宕机后,eureka server管理界面出现如下现象,即触发了自我保护机制

2.自我保护机制(Self Preservation Mode)

markdown 复制代码
- 官网地址:https://github.com/Netflix/eureka/wiki/Server-Self-Preservation-Mode
- 自我保护机制默认是开启的。这样做是为了确保灾难性的网络事件不会清除eureka注册表数据,并将其传播到下游的所有客户端
- 自我保护机制,将客户端在服务注册中心清除的条件
	1.心跳次数高于预期阈值
	2.关闭自我保护机制

3.eureka server关闭自我保护机制(了解即可)

properties 复制代码
1.eureka server端添加配置
# 关闭自我保护机制,默认开启(建议开启)
eureka.server.enable-self-preservation=false
# 超时3S自动清除
eureka.server.eviction-interval-timer-in-ms=3000

2.eureka client端添加配置
# 用来修改eureka server默认接收心跳的最大时间,默认是90S
eureka.instance.lease-expiration-duration-in-seconds=10
# 指定客户端多久向eureka server发送一次心跳,默认是30S
eureka.instance.lease-renewal-interval-in-seconds=5
eureka server 集群搭建
properties 复制代码
搭建伪集群,有三台eureka server,分别为
localhost:8761/eureka/
localhost:8762/eureka/
localhost:8763/eureka/

在端口为8761的应用配置eureka server集群地址:
eureka.client.service-url.defaultZone=http://localhost:8762/eureka/,http://localhost:8763/eureka/
在端口为8762的应用配置eureka server集群地址:
eureka.client.service-url.defaultZone=http://localhost:8761/eureka/,http://localhost:8763/eureka/
在端口为8763的应用配置eureka server集群地址:
eureka.client.service-url.defaultZone=http://localhost:8761/eureka/,http://localhost:8762/eureka/

demo:用同一个服务多次启动,分别指定不同的端口号(-Dserver.port=8761、-Dserver.port=8762、-Dserver.port=8763)

在eureka client端添加eureka server集群地址
# eureka server集群注册中心地址
eureka.client.service-url.defaultZone=http://localhost:8761/eureka/,http://localhost:8762/eureka/,http://localhost:8763/eureka/

# eureka client端集群搭建
	- 指定不同的端口分别启动
	- spring.application.name指定的服务名称必须是同一个
  • localhost:8761

  • localhost:8762

  • localhost:8763

eureka 总结
markdown 复制代码
1.作用:在微服务架构中,充当服务注册中心
2.两个组件:eureka server、eureka client
3.eureka组件1.x(稳定),2.x版本停止更新
4.不推荐使用eureka作为服务注册中心
	4.1 最新版本已停止更新
	4.2 每次必须通过手动写代码形式开发服务注册中心
相关推荐
what丶k6 小时前
SpringBoot3 配置文件使用全解析:从基础到实战,解锁灵活配置新姿势
java·数据库·spring boot·spring·spring cloud
小信丶8 小时前
@Activate 注解详解:应用场景与实战示例
java·spring boot·后端·spring·spring cloud·微服务·dubbo
编程彩机9 小时前
互联网大厂Java面试:从Spring MVC到微服务架构场景解析
java·spring cloud·微服务·分布式事务·spring mvc
鸽鸽程序猿9 小时前
【JavaEE】【SpringCloud】 熔断和限流 Alibaba Sentinel
spring cloud·java-ee·sentinel
Roye_ack10 小时前
【微服务 Day8】SpringCloud实战开发(Elasticsearch02 + DSL查询、聚合)
spring cloud·微服务·架构·dsl·聚合
努力也学不会java10 小时前
【Spring Cloud】注册中心-Nacos
java·人工智能·spring boot·后端·spring·spring cloud
短剑重铸之日1 天前
《SpringCloud实用版》SpringCloud Alibaba和SpringCloud的区别
后端·spring·spring cloud·sca
康小庄1 天前
SpringBoot 拦截器 (Interceptor) 与切面 (AOP):示例、作用、及适用场景
java·数据库·spring boot·后端·mysql·spring·spring cloud
奋进的芋圆1 天前
Spring Boot 3.x 企业级 SSO 单点登录实现指南
spring boot·spring cloud
回忆是昨天里的海1 天前
k8s-部署spring cloud微服务
spring cloud·微服务·kubernetes