一、什么是SpringCloud
集成,把世界上最好的框架拿过来,集成到自己的项目中:配置管理,服务发现,智能路由,负载均衡,熔断器,控制总线,集群状态
- **Eureka:**服务治理组件,包含服务注册中心,服务注册与发现机制,(服务治理,服务注册/发现)
- **Zuul**:网关组件,提供智能路由,访问过滤功能
- **Ribbon**:客户负载均衡的服务器调用组件(客户端负载)
- **Feign**:服务调用,给予Ribbon和Hystrix的声明式服务调用组件(声明式服务调用)
- **Hystrix**:容错管理组件,实现短路器模式,帮助服务依赖中出现的延迟和为故障提供强大的容错能力(熔断,断路器,容错)
二、Eureka-服务治理
1、基础架构
1.1.1、服务注册中心(xxx-eureka)
1.1.2、Eureka服务集群
服务同步:
多个Eureka服务可以相互注册,每个服务会把自己的信息同步给其他Eureka服务,只要客户端访问任意一个Eureka服务就可以看到完整的服务列表信息
集群启动就是改变端口号,改变Eureka注册地址再次启动
# 指定服务端口号
server:
port: 10086
# 指定应用名
spring:
application:
name: eureka-server
eureka:
client:
service-url: Eureka注册地址-----配置其他的Eureka服务地址,相互注册,多个的话,逗号隔开
defaultZone: http://127.0.0.1:10087/eureka, http://127.0.0.1:10088/eureka
1.2.1、服务提供者(xxx-service-provider)
提供服务的应用,SpringBoot应用或者是其他任意技术实现,对外提供Rest风格服务
1.2.2、服务注册
服务提供者要向EurekaServer注册服务,并且完成服务续约等工作
服务提供者在启动时,会检测配置文件属性中的:eureka.client.register-with-eureka=true参数 是否正确,默认为true,若为true,服务提供者会想EurekaServer发起一个Rest请求,请求中携带自己的元数据信息,EurekaServer会把这些信息存储到一个双层Map结构中
第一层Map的Key就是服务id:一般是配置文件中的spring.application.name属性值
第二层Map的Key是服务的实例id:一般是host+serviceId+port,就是主机加服务名加端口号:localhost:service-provider:10010
# 指定服务端口号
server:
port: 10010
# 指定应用名
spring:
application:
name: provider-server
eureka:
client:
service-url: Eureka注册地址
defaultZone: http://127.0.0.1:10086/eureka
# 服务续约
instance:
lease-expiration-duration-in-seconds: 90 # 服务失效时间,默认90秒
lease-renewal-interval-in-seconds: 30 # 服务续约间隔时间,默认30秒
1.3.1、服务消费者(xxx-service-consumer)
从注册 中心获取服务,从而得知各个服务方的信息,知道去哪里调用服务方
当服务启动时,会检测:eureka.client.fetch-registry=true参数的值,如果为true,就会拉去EurekaServer服务列表的只读备份,然后缓存到本地,并且每隔30秒重新获取并更新数据,
# 指定服务端口号
server:
port: 10000
# 指定应用名
spring:
application:
name: consumer-server
eureka:
client:
service-url: Eureka注册地址
defaultZone: http://127.0.0.1:10086/eureka
registry-fetch-interval-seconds: 5 # 修改拉去服务列表的时间间隔为5秒