SpringCloud从技术架构上降低了对大型系统构建的要求和难度,使我们以非常低的成本(技术或者硬件)搭建一套高效,分布式,容错的平台.
实际开发中,每个微服务为一个独立的SpringBoot工程
一. 工程的创建
1.1 创建服务的父工程
创建maven工程 配置依赖坐标 (SpringBoot,SpringCloud)
maven的parent 以及SpringCloud的依赖管理坐标
1.2 创建服务提供者(provider)工程
创建SpringBoot工程 勾选依赖坐标 数据库连接信息
编写三层架构: Mapper Service Controller
配置Mapper映射文件
在配置文件application.properties 或者 application.yml 中
添加MyBatis配置 扫描mapper.xml和mapper
1.3 创建服务消费者(consumer)工程
创建SpringBoot工程 consumer_service 勾选starter
注册RestTemplate用于发送请求
在Controller中调用RestTemplate
二. 注册中心 Spring Cloud Eureka
Eureka负责管理记录服务提供者的信息。
服务调用者无需自己寻找服务,Eureka自动匹配服务给调用者。
服务提供者:启动后向Eureka注册自己的信息(地址,提供什么服务)
服务消费者:向Eureka订阅服务,Eureka会将对应服务的所有提供者地址列表发送给消费者,并且定期更新
心跳(续约):提供者定期通过http方式向Eureka刷新自己的状态
搭建 eureka-server工程
创建springboot工程 勾选坐标 Eureka_server
在启动类EurekaServerApplication声明当前应用为Eureka服务
使用@EnableEurekaServer注解 // 开启注册中心
编写配置文件application.yml
在 服务提供者(user-service) 添加注册服务中心 Eureka
然后再启动类上开启 Eureka 客户端发现功能
使用注解@EnableDiscoveryClient // 开启Eureka客户端发现功能
最后在application.yml 中注入eurekaserver配置
在 服务消费者(consumer-service) 添加注册服务中心 Eureka
在启动类开启Eureka客户端 使用注解@EnableDiscoveryClient // 开启服务发现
最后修改application.yml配置文件
消费者consumer 通过Eureka 访问提供者provice
首先在controller中注入 DiscoveryClient
Eureka中三个核心角色:
Eureka服务注册中心: 提供服务注册发现功能
服务提供者: 提供服务的应用
服务消费者: 从注册中心获取服务列表 ,知道去哪调用服务方
服务注册过程:
当我们导入了eureka-client依赖坐标,配置Eureka服务注册中心地址
服务在启动时,会检测是否有@DiscoveryClient注解和配置信息
如果有,则会向注册中心发起注册请求,携带服务元数据信息
Eureka注册中心会把服务的信息保存在Map中。
服务的续约:
服务每隔30秒会向注册中心续约(心跳)一次,如果没有续约,
租约在90秒后到期,然后服务会被失效
获取服务列表:
每隔30秒服务会从注册中心中拉取一份服务列表,这个时间可以通过配置修改
三. 负载均衡 Spring Cloud Ribbon
在存在多个服务提供者时, 使用负载均衡
因为Eureka已经集成了Ribbon,所以无需引入依赖
直接在RestTemplate的配置方法上添加注解 @LoadBalanced // 开启负载均衡
修改ConsumerController调用方式,不再手动获取ip和端口,而是直接通过服务名称调用
Ribbon默认的负载均衡策略是轮询 , 可以通过修改配置来变成随机
负载均衡器会动态的从服务注册中心中获取服务提供者的访问地址(host、port) 根据service名称
四. 熔断器 Spring Cloud Hystrix
目标:服务提供者的服务出现了故障,服务消费者快速失败给用户友好提示。服务降级
首先要在服务消费者pom中引入熔断的starter依赖坐标
服务消费者中开启熔断的注解 在启动类上开启
编写服务降级处理方法: 使用@HystrixCommand定义fallback方法
其中fallbackMethod的值要和降级方法名称相同
参数 和 返回值 原方法和降级方法的都要相同
可以配置的熔断策略: