一、什么是SpringCloud

集成,把世界上最好的框架拿过来,集成到自己的项目中:配置管理,服务发现,智能路由,负载均衡,熔断器,控制总线,集群状态

  1. - **Eureka:**服务治理组件,包含服务注册中心,服务注册与发现机制,(服务治理,服务注册/发现)
  2. - **Zuul**:网关组件,提供智能路由,访问过滤功能
  3. - **Ribbon**:客户负载均衡的服务器调用组件(客户端负载)
  4. - **Feign**:服务调用,给予RibbonHystrix的声明式服务调用组件(声明式服务调用)
  5. - **Hystrix**:容错管理组件,实现短路器模式,帮助服务依赖中出现的延迟和为故障提供强大的容错能力(熔断,断路器,容错)

二、Eureka-服务治理

1、基础架构

1.1.1、服务注册中心(xxx-eureka)

服务端应用,提供服务注册和发现功能

1.1.2、Eureka服务集群

服务同步:

多个Eureka服务可以相互注册,每个服务会把自己的信息同步给其他Eureka服务,只要客户端访问任意一个Eureka服务就可以看到完整的服务列表信息

集群启动就是改变端口号,改变Eureka注册地址再次启动

  1. # 指定服务端口号
  2. server:
  3. port: 10086
  4. # 指定应用名
  5. spring:
  6. application:
  7. name: eureka-server
  8. eureka:
  9. client:
  10. service-url: Eureka注册地址-----配置其他的Eureka服务地址,相互注册,多个的话,逗号隔开
  11. 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

  1. # 指定服务端口号
  2. server:
  3. port: 10010
  4. # 指定应用名
  5. spring:
  6. application:
  7. name: provider-server
  8. eureka:
  9. client:
  10. service-url: Eureka注册地址
  11. defaultZone: http://127.0.0.1:10086/eureka
  12. # 服务续约
  13. instance:
  14. lease-expiration-duration-in-seconds: 90 # 服务失效时间,默认90秒
  15. lease-renewal-interval-in-seconds: 30 # 服务续约间隔时间,默认30秒

1.3.1、服务消费者(xxx-service-consumer)

从注册 中心获取服务,从而得知各个服务方的信息,知道去哪里调用服务方
当服务启动时,会检测:eureka.client.fetch-registry=true参数的值,如果为true,就会拉去EurekaServer服务列表的只读备份,然后缓存到本地,并且每隔30秒重新获取并更新数据,

  1. # 指定服务端口号
  2. server:
  3. port: 10000
  4. # 指定应用名
  5. spring:
  6. application:
  7. name: consumer-server
  8. eureka:
  9. client:
  10. service-url: Eureka注册地址
  11. defaultZone: http://127.0.0.1:10086/eureka
  12. registry-fetch-interval-seconds: 5 # 修改拉去服务列表的时间间隔为5秒