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文件的配置
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 ,注意,注册的名称不要使用"_"
# 指定端口
server:
port: 8080
spring:
application:
# 应用名
name: order-service
# eureka 配置
eureka:
client:
# 注册中心服务地址
service-url:
defaultZone: http://localhost:8761/eureka
反是有以上配置的微服务(模块)都属于客户端,在启动的时候会自动去注册中心注册服务

浙公网安备 33010602011771号