SpringCloud Netflix Eureka
SpringCloud五大核心组件
- 服务注册发现-Netflix Eureka
- 配置中心 - Spring Cloud Config
- 负载均衡-Netflix Ribbon
- 断路器 - Netflix Hystrix
- 路由(网关) - Netflix Zuul
Eureka
Eureka 是 Netflix 出品的用于实现服务注册和发现的工具。 Spring Cloud 集成了 Eureka,并提供了开箱即用的支持。其中, Eureka 又可细分为 Eureka Server 和 Eureka Client。
实现原理:
Eureka是SpringCloud中的注册中心,在Eureka管理了所有的微服务,服务的提供者和消费者都要在注册中心进行注册,当有消费者需要调用服务的时候,直接去注册中心进行拉取提供者的地址和端口号,以及服务名称等消息,然后消费者根据消息内容使用RestTemplate进行请求到对应的提供者,当下次在进项该调用时候,服务器会将上次拉取的消息缓存在服务器内,所以说,当第二次请求的时候,就算注册中心宕机也还是能正常访问的。
- 提供者:要访问的目标服务器,提供数据
- 消费者:请求访问的服务器,获取数据
1、Eureka服务正常启动,如果存在集群的话就要互相同步
2、Eureka客户端启动的时候,会根据配置的地址,将该服务注册到Eureka服务中,
3、Eureka客户端会每隔30s发送一个心跳给Eureka服务
4、Eureka服务在90s之内没有收到Eureka客户端的心跳,会认为客户端出现故障,然后从服务列表中移除,
5、在一段时间内,Eureka服务端统计到有大量的(85%)Eureka客户端没有发送心跳Eureka服务会认为此时,自己出现了网络故障,就会触发自我保护机制,不会再移除eureka客户端。当前不会把数据同步给其他的Eureka服务,但是对外还是提供服务的
6、如果网络恢复正常,自我保护机制关闭,接着将数据同步到其他的Eureka服务器
7、Eureka客户端要调用其他服务,需要先到Eureka服务器中拉取其他服务的信息,然后再缓存到本地,再根据客户端的负载均衡策略进行负载均衡
8、Eureka客户端会在一段时间内从Eureka服务端拉取最新的数据,更新本地的缓存数据。
9、Eureka客户端关闭后,Eureka就不会再发送心跳,Eureka服务就从自己的列表中移除
服务端搭建
1、创建一个SpringBoot工程,创建一个父工程,并且在父工程中指定SpringCloud的版本,并且将打包方式修改为pom
<!--先导入springboot父依赖--> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.3.2.RELEASE</version> <relativePath/> </parent> <!--指定SpringCloud的版本--> <properties> <java.version>1.8</java.version> <spring.cloud.version>Hoxton.SR10</spring.cloud.version> </properties> <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>${spring.cloud.version}</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement>
2、创建一个SpringBoot子工程,导入EurekaServer的依赖
<dependencies> <!-- spring begin --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId> </dependency> <!-- spring end --> </dependencies>
3、application.yml文件的配置
1 2 3 4 5 6 7 8 9 10 11 12 13 | server: port: 8761 # 指定端口 spring: application: name: eureka-server # 应用名 # eureka 配置 eureka: client: register-with-eureka: true # 是否注册到Eureka,默认 true fetch-registry: false # 是否从Eureka拉取地址列表 service-url: defaultZone: http: //localhost:8761/eureka # 需要进行消息注册的请求地址 |
4、启动类添加注解@EnableEurekaServer 表示该微服务为一个消息注册中心的服务端
@EnableEurekaServer @SpringBootApplication public class EurekaServerApplication { public static void main(String[] args) { SpringApplication.run(EurekaServerApplication.class, args); } }
5、启动服务后,访问 http://localhost:8761/
客户端搭建
1、再创建一个SpringBoot子工程,导入EurekaClient的依赖
<dependencies> <!--eureka客户端的依赖--> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> </dependencies>
2、编写配置文件application.yml ,注意,注册的名称不要使用"_"
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | # 指定端口 server: port: 8080 spring: application: # 应用名 name: order-service # eureka 配置 eureka: client: # 注册中心服务地址 service-url: defaultZone: http: //localhost:8761/eureka |
反是有以上配置的微服务(模块)都属于客户端,在启动的时候会自动去注册中心注册服务
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?