SpringCloud学习教程

文章目录

SpringCloud学习教程

  • 学习路线架构图:
  • 项目案例架构图:
  • SpringCloud学习教程
  • 一、Spring Cloud简介
  • 二、服务的注册与发现(Eureka)
  • 1、Spring Cloud Eureka的基础架构
  • 2、搭建服务注册中心
  • 3、创建服务提供者
  • 4、创建服务消费者
  • 三、服务通信
  • 四、 消息和异步
  • 四、服务网关 (Zuul)
  • 五、分布式配置(Spring Cloud Config)
  • 六、熔断 (Hystrix)
  • 七、服务监控(Spring Boot Admin)
  • 八、链路追踪(Spring Cloud Sleuth)
  • 相关资料

学习路线架构图:

spring cloud vue实战 pdf springcloud教程_服务端

项目案例架构图:

spring cloud vue实战 pdf springcloud教程_SpringCloud_02

SpringCloud学习教程

一、Spring Cloud简介

Spring Cloud是一个基于Spring Boot实现的云应用开发工具,它为基于JVM的云应用开发中的配置管理、服务发现、断路器、智能路由、微代理、控制总线、全局锁、决策竞选、分布式会话和集群状态管理等操作提供了一种简单的开发方式。

Spring Cloud包含了多个子项目(针对分布式系统中涉及的多个不同开源产品),比如:Spring Cloud Config、Spring Cloud Netflix、Spring Cloud CloudFoundry、Spring Cloud AWS、Spring Cloud Security、Spring Cloud Commons、Spring Cloud Zookeeper、Spring Cloud CLI等项目。

这篇文章是主要讲服务注册与发现、服务通信、配置中心、服务网关、熔断这5个最基础的,其他的以后有时间再说,我们先可以读读这篇文章来大概了解一下这5个组件是什么:SpringCloud分布式开发五大神兽

二、服务的注册与发现(Eureka)

SpringCloud Eureka是SpringCloud Netflix服务套件中的一部分,它基于Netflix Eureka做了二次封装,主要负责完成微服务架构中的服务治理功能。

1、Spring Cloud Eureka的基础架构

  • 服务注册中心:Eureka提供的服务端,提供服务注册于发现的功能,也就是在上一节中我们实现的eureka-server
  • 服务提供者:提供服务的应用,可以是springBoot应用,也可以是其他技术平台且遵循Eureka通信机制的应用。它将自己提供的服务注册到Eureka,以供其他应用发现,也就是上一节中我们实现的HELLO-SERVICE应用。
  • 服务消费者:消费者应用从服务注册中心获取服务列表,从而使消费者可以知道从何处调用其所需要的服务,在上一节使用了Ribbon来实现服务消费,另外后续还需介绍是哦那个Feign的消费方式。

很多时候客户端既是服务提供者也是服务消费者。

具体看:Spring Cloud Eureka的基础架构

上面《Spring Cloud Eureka的基础架构》文章中:“Eureka中有Region和Zone的概念”具体可看:Springcloud中的region和zone的使用

2、搭建服务注册中心

详见:Spring Cloud构建微服务架构(一)服务注册与发现

3、创建服务提供者

详见:Spring Cloud构建微服务架构(一)服务注册与发现

4、创建服务消费者

详见:Spring Cloud构建微服务架构(二)服务消费者

三、服务通信

这里主要讲两种常用的:RestTemplate、Feign(推荐使用)

详见:springCloud 服务间的两种通信方式

这里通信涉及到负载均衡,这里使用到的负载均衡是Ribbon, eureka是客户端负载均衡,默认使用的是轮询的方式(比如有两个服务端,请求方式就是1,2,1,2,1,2…有序的),其实,后面要讲的服务网关 也都有用到Ribbon作为负载均衡。

具体Ribbon见下面文章:

  • Spring Cloud 负载均衡器 Ribbon原理及实现
  • Spring Cloud中的负载均衡策略

四、 消息和异步

这里主要是讲解SpringCloud中的Stream的使用,Stream是在消息队列RabbitMQ和Kafka的上层进一步的封装,使得开发人员在使用消息队列时更加方便,而且还支持动态更换底层队列,意思就是使用Stream并不需要关心底层使用的是RabbitMQ还是Kafka,这有点类似于Hibernate的HQL的实现,我们并不用关心数据库是使用的MySQL还是SQLServer,而是由框架自动帮我们处理的。

这里我们使用RabbitMQ,不了解RabbitMQ的看这里:

stream使用参考下面:

  • Stream 入门、主要概念与自定义消息发送与接收
  • SpringCloud-Stream整合RabbitMQ
  • SpringCloud系列十一:SpringCloudStream(SpringCloudStream 简介、创建消息生产者、创建消息消费者、自定义消息通道、分组与持久化、设置 RoutingKey)

源码:

  • springcloud-stream-provider:消息发送方
  • springcloud-stream-customer:消息接收方

四、服务网关 (Zuul)

主要是处理路由: 路由在微服务架构的一个组成部分。 例如,/可以映射到您的Web应用程序,/ api / users映射到用户服务,并且/ api / shop映射到商店服务。 Zuul是Netflix的基于JVM的路由器和服务器端负载均衡器。

具体看:SpringCloud微服务实战-Zuul-APIGateway(十)

还有一个跨域的,很常用,上面博客没有讲到:spring-cloud-zuul跨域问题解决

案例代码:springcloud-api-gateway-网关服务

五、分布式配置(Spring Cloud Config)

主要看案例代码,注释很详细。

在使用bus时(这里是使用GitHub存放配置文件),有一个坑,就是使用WebHook时一直报错400。 原因:集成WebHook后,GitHub在进行post请求的同时默认会在body加上一串载荷,我们的spring boot因为无法正常反序列化这串载荷而报了400错误。

解决办法:

六、熔断 (Hystrix)

  • Hystrix熔断框架介绍
  • Spring Cloud入门教程-Hystrix断路器实现容错和降级
  • Hystrix超时实现机制
  • Hystrix熔断器执行机制

七、服务监控(Spring Boot Admin)

Spring Boot Admin 用于管理和监控一个或多个Spring Boot程序,在 Spring Boot Actuator 的基础上提供简洁的可视化 WEB UI,

提供如下功能:

  • 显示 name/id 和版本号
  • 显示在线状态
  • Logging 日志级别管理
  • JMX beans 管理
  • Threads 会话和线程管理
  • Trace 应用请求跟踪
  • 应用运行参数信息,如:
  • Java 系统属性
  • Java 环境变量属性
  • 内存信息
  • Spring 环境属性

使用很简单,参考这个即可:

效果图:

spring cloud vue实战 pdf springcloud教程_服务端_03

spring cloud vue实战 pdf springcloud教程_服务端_04

spring cloud vue实战 pdf springcloud教程_SpringCloud_05

源码:springcloud-admin-服务监控server端

这里说一下,我们的商品和订单实际上就可以看作是服务监控的客户端。

八、链路追踪(Spring Cloud Sleuth)

效果图:

spring cloud vue实战 pdf springcloud教程_服务端_06

使用很简单,参考下面的博客即可:

  • 服务链路追踪(Spring Cloud Sleuth)
  • SpringCloud入门实战之九:服务链路追踪(Spring Cloud Sleuth)

相关资料

  • [* Spring Cloud微服务实战-SpringBoot2.X - 视频](链接: https://pan.baidu.com/s/1--hMJSvQimIrnafrudS6XQ 提取码: 533p)

案例代码:

  • springcloud-eureka-服务注册发现-注册中心
  • springcloud-client-服务注册发现-客户端
  • springcloud-commodity-商品服务端
  • springcloud-commodity-parent-商品服务端(多模块版本)
  • springcloud-order-订单服务端
  • springcloud-order-parent-订单服务端(多模块版本)
  • springcloud-config-统一配置中心服务端(管理各个模块的配置)
  • springcloud-config-repository-此项目用来存放SpringCloud-config(统一配置中心)管理的配置文件
  • springcloud-stream-provider:消息发送方
  • springcloud-stream-customer:消息接收方
  • springcloud-api-gateway-网关服务
  • springcloud-user-用户服务端
  • springcloud-admin-服务监控server端

上面的示例代码几乎是按照此视频编写的(减少了一些业务流程), 项目是一个关于商品和订单的,订单服务调用商品服务的接口(查询商品信息),然后进行订单、订单详情添加。