SpringCloud之Eureka(服务注册与发现)
一.为什么需要注册中心Eureka?
讲Eureka之前我们先说说使用SpringCloud构建项目
1.从分布式/微服务的角度而言:就是把我们一大的项目,分解成多个小的模块。这些小的模块组合起来,完成功能
2.那会出现什么问题呢?
首当其冲的就是子系统之间的通讯问题。子系统与子系统之间不是在同一个环境下,那就需要远程调用。
3.既然是远程调用,就必须知道ip地址,而ip地址经常变动的话,那我们手动维护这些静态资源会非常麻烦,
所以就有了今天的主角Eureka
4.当服务器启动后,就会将ip交给注册中心Eureka管理,然后注册中心时刻监控着ip的存活情况
二.Eureka(服务注册与发现)是什么?
Eureka专门用于给其他服务注册的称为Eureka Server(服务注册中心),其余注册到Eureka Server的服务称为Eureka Client
1.服务注册:服务启动之后,自动将ip跟端口注册到注册中心
2.服务治理:服务管理,通过心跳方式,保证注册中心每个服务ip可用
3.Eureka Client分为服务提供者和服务消费者。
三.Eureka的治理机制
1.服务提供者(Eureka Client)
服务注册:启动的时候会通过发送REST请求的方式将自己注册到Eureka Server上,同时带上了自身服务的一些元数据信息。
服务续约:在注册完服务之后,服务提供者会维护一个心跳用来持续告诉Eureka Server: "我还活着 ”
服务下线:当服务实例进行正常的关闭操作时,它会触发一个服务下线的REST请求给Eureka Server,
告诉服务注册中心:“我要下线了 ”
2.服务消费者(Eureka Client)
获取服务:当我们启动服务消费者的时候,它会发送一个REST请求给服务注册中心,来获取上面注册的服务清单
服务调用:服务消费者在获取服务清单后,通过服务名可以获得具体提供服务的实例名和该实例的元数据信息,
在进行服务调用的时候,优先访问同处一个Zone中的服务提供方。
3.服务注册中心(Eureka Server)
失效剔除:默认每隔一段时间(默认为60秒) 将当前清单中超时(默认为90秒)没有续约的服务剔除出去。
自我保护:Eureka Server 在运行期间,会统计心跳失败的比例在15分钟之内是否低于85%(通常是网络不稳定),
Eureka Server会将当前的实例注册信息保护起来,让这些实例不会过期,尽可能保护这些注册信息。
四.注册中心eureka-server搭建
1.步骤
1.新建子项目-cloud-eureka-server8761
2.启动类上贴上@EnableEurekaServer注解
3.导入依赖,配置yml配置文件
4.启动启动类
5.测试:http://localhost:8761
2.pom.xml
<parent>
<artifactId>spcloud-demo</artifactId>
<groupId>cn.wolfcode.springcloud</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>cloud-eureka-server8761</artifactId>
1:导入springboot-web环境
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
2:导入springboot-监控依赖【后续图形化监控】
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
3:Eureka服务端依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
</dependencies>
3.application.yml
server:
port: 8761
eureka:
instance:
hostname: localhost
client:
registerWithEureka: false
fetchRegistry: false
serviceUrl:
defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
server:
enable-self-preservation: false
五.商品服务product-server搭建
步骤:
1.新建子项目-cloud-provider-product8080
2.启动类上贴上@EnableEurekaClient注解
3.导入依赖,配置yml配置文件
4.启动启动类
5.测试:先启动cloud-eureka-server8761
再启动cloud-provider-product8080
最后打开浏览器输入 http://localhost:8761 查看服务注册栏
1.测试结果
2.pom.xml
<parent>
<artifactId>spcloud-demo</artifactId>
<groupId>cn.wolfcode.springcloud</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>cloud-provider-product8080</artifactId>
1:导入springboot-web环境
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
2:导入springboot-监控依赖【后续图形化监控】
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
3:Eureka客户端依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
</dependencies>
3.application.yml
server:
port: 8080
spring:
application:
name: product-server
eureka:
client:
registerWithEureka: true
fetchRegistry: true
serviceUrl:
defaultZone: http://localhost:8761/eureka/
instance:
lease-renewal-interval-in-seconds: 1
lease-expiration-duration-in-seconds: 2
六.Eureka 自我保护机制
1.Eureka Server 在运行期间会去统计心跳失败比例在 15 分钟之内是否低于 85%,如果低于 85%,
Eureka Server 会将这些实例保护起来,让这些实例不会过期
2.我们可以通过配置文件关闭自我保护机制,不推荐使用
eureka.server.enable-self-preservation=false 关闭保护机制
3.我们可以设置心跳发送时间与心跳等待时间
七.常见注册中心
zookeeper
Eureka
consul
nacos
etcd
八.小结
1.Eureka注册中心提供服务注册与发现功能,对服务的url地址进行统一管理.
2.Eureka分为Eureka Server(服务注册中心)和Eureka Client(客户端)
3.Eureka Client又分为服务提供者和服务消费者
4.Eureka自我保护机制就是防止网络延迟时,将有用的ip地址误删调,我们也可以收到关闭这个机制(不推荐)
5.Eureka通过心跳模式来实时监控ip地址是否可用,我们也可以设置心跳时间
6.导入依赖时,有2种,一种为服务端的(即注册中心),一种为客户端的