2024最新SpringCloud学习教程,Consul/Nacos/Feign/Sentinel/Gateway/Seata一网打尽

  本文主要介绍了SpringCloud最新的应用技术,简单说明每类技术涉及的知识点,对应技术的学习资料、软件、可用代码和下载地址在文末给出。

文章目录

  • 说明
  • SpringCloud简介
  • Consul
    • Consul简介
    • 使用示例
  • Nacos
    • Nacos简介
    • 使用示例
  • 负载均衡LoadBalancer
    • LoadBalancer简介
    • 使用示例
  • 服务调用与负载均衡OpenFeign
    • OpenFeign简介
    • 使用示例
  • 服务熔断和降级Resilience4j
    • Resilience4j简介
    • 使用示例
  • 服务熔断和降级Sentinel
    • Sentinel简介
    • 使用示例
  • 服务链路追踪Micrometer+Zipkin
    • Micrometer、Zipkin简介
    • 使用示例
  • 服务网关Gateway
    • Gateway简介
    • 使用示例
  • 分布式事务Seata
    • Seata简介
    • 使用示例
  • SpringCloud资料下载

  2024年,SpringCloud生态底层技术已经发生了较大改变。随着Eureak/Ribbon/Hystrix/Sleuth/Zuul等陆续已宣布停止更新,其他技术随之上位将其替代。目前SpringCloud生态应用场景和常用的底层应用技术如下,文章也将由此展开。相关图片和材料来自于尚硅谷和本地截图,可供配套学习。
在这里插入图片描述

服务场景支撑技术
服务注册与发现Consul、Nacos(阿里系)
分布式配置管理Consul、Nacos(阿里系)
服务调用与负载均衡LoadBalancer、OpenFeign
服务熔断和降级Resilience4j、Sentinel(阿里系)
服务链路追踪Micrometer Tracing + Zipkin
服务网关Gateway
分布式事务Seata(阿里系)

说明

  每个章节的结构均为简介+使用示例。简介为该技术的原理简述。使用示例为对应软件的展示,并不涉及具体的测试过程。
  文章内容有限,无法深入演示所有过程,如果需要相关资料深入学习,可跳至最后下载相关资料和代码即可。

SpringCloud简介

  Spring cloud 是一系列框架的有序集合。它利用 spring boot 的开发便利性巧妙地简化了分布式系统基础设施的开发,如服务发现注册、配置中心、消息总线、负载均衡、断路器、数据监控等,都可以用 spring boot 的开发风格做到一键启动和部署。Spring Cloud 并不重复造轮子,而是将市面上开发得比较好的模块集成进去,进行封装,从而减少了各模块的开发成本。换句话说:Spring Cloud 提供了构建分布式系统所需的“全家桶”。针对每类基础服务,有对应的落地技术来实现,下面将展开介绍。

Consul

Consul简介

为什么需要服务注册与发现
(1)如果订单微服务和支付微服务的IP地址或者端口号发生了变化,则支付微服务将变得不可用,需要同步修改订单微服务中调用支付微服务的IP地址和端口号。
(2)如果系统中提供了多个订单微服务和支付微服务,则无法实现微服务的负载均衡功能。
(3)如果系统需要支持更高的并发,需要部署更多的订单微服务和支付微服务,硬编码订单微服务则后续的维护会变得异常复杂。

为什么需要分布式配置管理
  微服务意味着要将单体应用中的业务拆分成一个个子服务,每个服务的粒度相对较小,因此系统中会出现大量的服务。由于每个服务都需要必要的配置信息才能运行,所以一套集中式的、动态的配置管理设施是必不可少的。比如某些配置文件中的内容大部分都是相同的,只有个别的配置项不同。就拿数据库配置来说吧,如果每个微服务使用的技术栈都是相同的,则每个微服务中关于数据库的配置几乎都是相同的,有时候主机迁移了,我希望一次修改,处处生效。

是什么
  Consul 是一套开源的分布式服务发现和配置管理系统。提供了微服务系统中的服务治理、配置中心、控制总线等功能。这些功能中的每一个都可以根据需要单独使用,也可以一起使用以构建全方位的服务网格,总之Consul提供了一种完整的服务网格解决方案

能做什么
  提供服务发现、KV存储、可视化Web页面等功能

Consul官网

使用示例

Consul页面
Consul软件后台启动演示
在这里插入图片描述
http://localhost:8500/
服务注册与发现-可以在Consul前台页面查看到所有配置了Consul依赖的服务:
在这里插入图片描述
Consul前台页面-分布式配置管理,通过自建对应文件夹和文件内容完成配置,这样不用重启微服务,也能够动态实时获取到data文件中的相关参数。
在这里插入图片描述

Nacos

Nacos简介

是什么
  官方:一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台
  属于 SpringCloud Alibaba。

中文官网

使用示例

Nacos软件后台运行:
在这里插入图片描述
服务注册与发现-入驻Nacos的微服务可以在服务管理页面看到;在配置管理页面可以完成各微服务的配置:
在这里插入图片描述
配置页面-分布式配置管理:
在这里插入图片描述

负载均衡LoadBalancer

LoadBalancer简介

是什么
  负载均衡简单的说就是将用户的请求平摊的分配到多个服务上,从而达到系统的HA(高可用),常见的负载均衡有软件Nginx,LVS,硬件 F5等。
  Spring Cloud LoadBalancer是由SpringCloud官方提供的一个开源的、简单易用的客户端负载均衡器,它包含在SpringCloud-commons中用它来替换了以前的Ribbon组件。

官方网站

使用示例

在这里插入图片描述
  8001和8002为服务提供者,80为消费者。测试80调用服务提供者时,会实现8001端口和8002端口的轮询调用。

服务调用与负载均衡OpenFeign

OpenFeign简介

是什么
  OpenFeign是一个声明式的Web服务客户端,是当前微服务之间调用的事实标准。
  在OpenFeign的实现下,我们只需创建一个接口并使用注解的方式来配置它(在一个微服务接口上面标注一个@FeignClient注解即可),即可完成对服务提供方的接口绑定,统一对外暴露可以被调用的接口方法,大大简化和降低了调用客户端的开发量,也即由服务提供者给出调用接口清单,消费者直接通过OpenFeign调用即可。
  OpenFeign还集成SpringCloud LoadBalancer,可以实现负载均衡。

涉及的注解
@EnableFeignClients 标注在主启动类上,表示开启Feign功能并激活。标注在服务发起的一方-消费者。
@FeignClient 配置在common微服务的服务接口上。

Feign的使用参考-更详细的介绍
OpenFeign 全方位讲解

官网

使用示例

在这里插入图片描述
业务流程示例
在这里插入图片描述
代码测试内容包括:
1.服务消费者通过调用公共模块API的服务接口实现服务调用
2.OpenFeign超时控制测试【通过配置自定义超时时间】
3.OpenFeign重试机制测试【通过配置自定义重试次数】

服务熔断和降级Resilience4j

Resilience4j简介

是什么
  介绍Resilience4j前,需要先介绍CircuitBreaker断路器。
  CircuitBreaker的目的是保护分布式系统免受故障和异常,提高系统的可用性和健壮性
  当一个组件或服务出现故障时,CircuitBreaker会迅速切换到开放OPEN状态(保险丝跳闸断电),阻止请求发送到该组件或服务从而避免更多的请求发送到该组件或服务。这可以减少对该组件或服务的负载,防止该组件或服务进一步崩溃,并使整个系统能够继续正常运行。同时,CircuitBreaker还可以提高系统的可用性和健壮性,因为它可以在分布式系统的各个组件之间自动切换,从而避免单点故障的问题。
  而Resilience4j是断路器思想的落地实现者。Resilience4j是一个轻量级容错框架,提供了断路器,限流器,重试,隔离等功能。

熔断:断路
在这里插入图片描述
核心注解:@CircuitBreaker 加在对应方法上

隔离:舱壁
含义:用于限并发,实现依赖隔离和负载保护,限制对于下游服务的最大并发数量。
Resilience4j提供了两种隔离的实现方式,可以限制并发执行的数量。
SemaphoreBulkhead使用了信号量
FixedThreadPoolBulkhead使用了有界队列和固定大小线程池
核心注解:@Bulkhead 加在对应方法上

限流:速率限制
  限流,就是通过对并发访问/请求进行限速,或者对一个时间窗口内的请求进行限速,以保护应用系统,一旦达到限制速率则可以拒绝服务、排队或等待、降级等处理。
  Resilience4j使用令牌桶算法来实现限流。
核心注解:@RateLimiter 加在对应方法上

中文手册介绍

使用示例

代码涉及测试:
1.基于数量和基于时间的滑动窗口断路器测试
2.信号量舱壁和线程池舱壁测试
3.限流测试

服务熔断和降级Sentinel

Sentinel简介

是什么
  随着微服务的流行,服务和服务之间的稳定性变得越来越重要。Sentinel 是面向分布式、多语言异构化服务架构的流量治理组件,主要以流量为切入点,从流量路由、流量控制、流量整形、熔断降级、系统自适应过载保护、热点流量防护等多个维度来帮助开发者保障微服务的稳定性
  属于 SpringCloud Alibaba。

基本概念
1.资源
  资源是 Sentinel 的关键概念。它可以是 Java 应用程序中的任何内容,例如,由应用程序提供的服务,或由应用程序调用的其它应用提供的服务,甚至可以是一段代码。
  只要通过 Sentinel API 定义的代码,就是资源,能够被 Sentinel 保护起来。大部分情况下,可以使用方法签名,URL,甚至服务名称作为资源名来标示资源
2.规则
  围绕资源的实时状态设定的规则,可以包括流量控制规则、熔断降级规则以及系统保护规则。所有规则可以动态实时调整。

原理
在这里插入图片描述

流控
在这里插入图片描述
熔断
在这里插入图片描述
在这里插入图片描述

热点
  热点即经常访问的数据,很多时候我们希望统计或者限制某个热点数据中访问频次最高的TopN数据,并对其访问进行限流或者其它操作

授权
  在某些场景下,需要根据调用接口的来源判断是否允许执行本次请求。此时就可以使用Sentinel提供的授权规则来实现,Sentinel的授权规则能够根据请求的来源判断是否允许本次请求通过。
在Sentinel的授权规则中,提供了 白名单与黑名单 两种授权类型。白放行、黑禁止

官方中文wiki

使用示例

Sentinel软件后台运行:
在这里插入图片描述
Sentinel软件前台页面展示
在这里插入图片描述

各类规则配置界面,配置后看进行相应测试
在这里插入图片描述

服务链路追踪Micrometer+Zipkin

Micrometer、Zipkin简介

是什么
  Micrometer是一套完整的分布式链路追踪解决方案。能将一次分布式请求还原成调用链路,进行日记记录和性能监控。
  Zipkin是一种分布式链路跟踪系统图形化的工具,Zipkin 是 Twitter 开源的分布式跟踪系统,能够收集微服务运行过程中的实时调用链路信息,并能够将这些调用链路信息展示到Web图形化界面上供开发人员分析,开发人员能够从ZipKin中分析出调用链路中的性能瓶颈,识别出存在问题的应用程序,进而定位问题和解决问题。

原理
  一条链路追踪会在每个服务调用的时候加上Trace ID 和 Span ID。
  链路通过TraceId唯一标识,Span标识发起的请求信息,各span通过parent id 关联起来 (Span:表示调用链路来源,通俗的理解span就是一次请求信息)
在这里插入图片描述

Micrometer官方介绍
Zipkin官方介绍

使用示例

通过80订单服务调用8001服务提供者,通过Micrometer收集链路信息,通过Zipkin展示。
在这里插入图片描述
启动Zipkin后台
在这里插入图片描述
http://localhost:9411/
访问Zipkin前台,可以看到每个方法的调用时长
在这里插入图片描述
Zipkin中可以看到请求链路
在这里插入图片描述

服务网关Gateway

Gateway简介

是什么
  Cloud全家桶中有个很重要的组件就是网关,在1.x版本中都是采用的Zuul网关;
  但在2.x版本中,zuul的升级一直跳票,SpringCloud最后自己研发了一个网关SpringCloud Gateway替代Zuul,那就是SpringCloud Gateway一句话:gateway是原zuul1.x版的替代
  Spring Cloud Gateway组件的核心是一系列的过滤器,通过这些过滤器可以将客户端发送的请求转发(路由)到对应的微服务。 Spring Cloud Gateway是加在整个微服务最前沿的防火墙和代理器,隐藏微服务结点IP端口信息,从而加强安全保护。Spring Cloud Gateway本身也是一个微服务,需要注册进服务注册中心。
  客户端向 Spring Cloud Gateway 发出请求。然后在 Gateway Handler Mapping 中找到与请求相匹配的路由,将其发送到 Gateway Web Handler。Handler 再通过指定的过滤器链来将请求发送到我们实际的服务执行业务逻辑,然后返回。

在架构图中的位置
在这里插入图片描述
作用
1.路由:
隐藏端口、隐秘URI等,保护后端真实端口和地址;路由转发;

2.断言:
匹配HTTP中所有的请求内容,请求与断言相匹配则进行路由。
自带After/Before/Header/Method Route Predicate等组件。可以实现某个时间点之前有效、某个时间点后有效、请求头中参数是否符合预期、请求方法是否匹配。

3.过滤:
可以再请求被路由前或者之后对请求进行修改。
自带Add/RemoveRequestHeader、Add/RemoveRequestParameter等组件。可以实现在请求头中添加或删除参数、在请求过程中增加或者删除请求参数等。

官网地址

使用示例

微服务8001为服务提供者,对外暴露时希望套一层9527网关。
测试实现路由、断言、过滤的功能测试。
在这里插入图片描述
1.路由:端口修改、动态获取服务URI
2.断言:测试After/Before/Header/Method Route Predicate的使用
3.过滤:测试Add/RemoveRequestHeader、Add/RemoveRequestParameter等过滤功能的使用

分布式事务Seata

Seata简介

  Apache Seata(incubating) 是一款开源的分布式事务解决方案,致力于在微服务架构下提供高性能和简单易用的分布式事务服务。
  属于 SpringCloud Alibaba。

原理
  ASeata对分布式事务的协调和控制是通过XID加上TC-TM-RM来完成的。XID是全局事务的唯一标识。TC可以简单理解为Seata本身;TM理解为微服务模块的发起者;RM则是mysql数据库本身。
  三个组件相互协作,TC以Seata 服务器(Server)形式独立部署,TM和RM则是以Seata Client的形式集成在微服务中运行

在这里插入图片描述
流程:

  1. TM 向 TC 申请开启一个全局事务,全局事务创建成功并生成一个全局唯一的 XID;
  2. XID 在微服务调用链路的上下文中传播;
  3. RM 向 TC 注册分支事务,将其纳入 XID 对应全局事务的管辖;
  4. TM 向 TC 发起针对 XID 的全局提交或回滚决议;
  5. TC 调度 XID 下管辖的全部分支事务完成提交或回滚请求。

官方中文介绍

使用示例

  模拟一个购物场景:总共涉及订单、库存、账户服务。用户下单后,生成一个订单,并远程调用扣减相应的库存和账户余额。这里会涉及一个分布式事务场景,要求整个链路支持正常业务和异常回滚。
涉及的微服务:
在这里插入图片描述
启动seata后台
在这里插入图片描述

测试时Seata前台展示:
可以观测到xid/transactionId/resourceId之间的关系
在这里插入图片描述

SpringCloud资料下载

  前面对SpringCloud相关技术作了整体介绍,但篇幅有限因此并未细节展开。如果要深入学习,推荐配套课程和手敲代码学习。
  配套课程为B站免费的尚硅谷2024年的SpringCloud课程。配套课程-尚硅谷周阳老师

SpringCloud整套课程涉及的微服务如下
在这里插入图片描述
配套70页Word笔记如下
在这里插入图片描述

  以上涉及的文档笔记、代码、软件均可在windows下正常使用和运行。可以通过关注以下公众号并回复springcloud即可获取网盘链接,该公众号仅用于免费资源分享。
公众号名称:Java侠客
请添加图片描述

觉得文章有帮助可以点个赞或关注支持一下哟~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/525125.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

链表实验.

#include<stdio.h> #include<stdlib.h>// 定义单链表节点结构体 struct Node {int data;struct Node* next; };struct Node* initList() {struct Node* list (struct Node*)malloc(sizeof(struct Node));list->data 0;list->next NULL;return list; }void…

蚁剑修改特征性信息

前言 我们首先得知道蚁剑的流量特征&#xff1a; 编码器和解码器的特征&#xff1a;蚁剑自带的编码器和解码器具有明显的特点&#xff0c;可以通过更改配置文件来达到流量加密的目的1。例如&#xff0c;蚁剑支持多种编码方式&#xff0c;如base64、chr、rot13等&#xff0c;这…

海量智库 | ANY权限原理介绍

ANY权限是Vastbase中的一种特殊的管理权限&#xff0c;用户能够通过ANY权限执行更广泛的操作&#xff0c;更加便利的管理数据库。 本文将为您介绍ANY权限管理的相关原理。 ANY权限管理相关解释 ANY权限管理&#xff0c;是对数据库内的某一类对象的所有实体进行特定的权限管理…

【C++】继承总结

一、前言 我们众所周知的C三大特性分别为&#xff1a;封装、继承、多态。 封装就是将接口实现统一化&#xff0c;隐藏那些不同的地方&#xff0c;在上层函数调用体现的方式一样&#xff0c;如各种容器的迭代器iterator&#xff0c;尽管底层实现的方式不同&#xff0c;但是在使用…

C++数据结构与算法——贪心算法简单题

C第二阶段——数据结构和算法&#xff0c;之前学过一点点数据结构&#xff0c;当时是基于Python来学习的&#xff0c;现在基于C查漏补缺&#xff0c;尤其是树的部分。这一部分计划一个月&#xff0c;主要利用代码随想录来学习&#xff0c;刷题使用力扣网站&#xff0c;不定时更…

安全加固方面思路

系统层面上的加固 备份重要配置文件&#xff1a;将一些重要的系统配置文件备份&#xff0c;包括 /etc/login.defs、/etc/security/limits.conf 等等。进行账号安全加固&#xff1a;修改密码安全策略&#xff0c;设置密码存在最长时间、密码长度、密码过期提醒等。 &#xff08…

Linux设备模型统一:桥接硬件多样性与应用程序开发的关键

在Linux的宏大世界中&#xff0c;各种各样的硬件设备如星辰般繁多。从常见的USB设备到复杂的网络接口卡&#xff0c;从嵌入式设备到强大的服务器&#xff0c;Linux需要在这些差异极大的硬件上运行。这就引出了一个问题&#xff1a;Linux是如何统一这些不同硬件的设备模型的呢&a…

Android 11 上的文件读写无权限问题

Android 6以上需要动态申请读写权限&#xff0c;但是11以上动态申请了读写权限也是无效。并且手动给予权限没有该按钮。 如上图华为钱包有个所有文件权限、但是百度地图只有仅媒体权限&#xff0c;仅媒体权限&#xff08;动态申请读写权限&#xff09;给予后软件还是没法访问文…

Linux中安装nacos

Linux中安装nacos 一、前言二、准备1、下载2、上传到服务器3、解压 三、配置1、备份配置文件2、导入sql3、修改前4、修改后 四、使用1、启动2、关闭 一、前言 最近国外的docker似乎是出什么问题&#xff0c;试过很多手段都拉不下 nacos 镜像&#xff0c;就打算在服务器装一下 …

10. 【Android教程】网格布局 GridLayout

今天要学的布局和上一节的 TableLayout 很类似&#xff0c;是在 Android 4.0 版本引入的布局方式。GridLayout 很有意思&#xff0c;自从引入之后在 Android 开发圈有以下特点&#xff1a; 大部分的开发者可能都不知道有这个布局方式的存在&#xff1b;有些开发者虽然知道&…

【智能算法】蛾群算法(MSA)原理及实现

目录 1.背景2.算法原理2.1算法思想2.2算法过程 3.结果展示4.参考文献 1.背景 2017年&#xff0c;AAA Mohamed等人受到飞蛾趋光行为启发&#xff0c;提出了蛾群算法&#xff08;Moth Swarm Algorithm, MSA&#xff09;。 2.算法原理 2.1算法思想 MSA设待优化问题的可行解和适…

Spring 如何优雅的灵活的Http重试

1、背景说明 在互联网时代&#xff0c; 不同系统之间大多数是通过http调用&#xff0c;调用过程中会超时、异常等过种问题。为了保证业务稳定&#xff0c;http 重试是常用方案。下面列举几种方案。 2、Http重试方案介绍 2.1 传统方案 1、使用传统的递归调用&#xff0c;实现方…

Java Lambda 表达式(详细)

Java Lambda 表达式 Lambda 的发展史 Java Lambda 表达式是在 Java 8 版本中引入的重要特性&#xff0c;它描述了一种更简洁、更灵活的方式来处理函数式编程。 在 Java 8 之前&#xff0c;要实现函数式编程&#xff0c;需要通过匿名类实现接口的方式。这样的代码通常比较冗长…

R语言数据可视化:基本绘图系统

目录 plot函数 par函数 hist函数 boxplot函数 plot函数应用实战 R语言中有三大绘图系统包括基本绘图系统&#xff0c;Lattice绘图系统&#xff0c;ggplot2绘图系统 基本绘图系统 在R语言中&#xff0c;以下函数通常用于创建和定制图形&#xff1a; plot 函数&#xff…

VMware Intel i5-10400 安装Mac 14 Sonoma

目录 安装完后的效果安装前的准备创建虚拟机创建虚拟机&#xff0c;选择典型安装。选择ISO文件选择系统类型命名虚拟机设置磁盘完成 配置虚拟机文件修改配置文件 第一次运行虚拟机选择语言选择磁盘工具格式磁盘安装macOS Sonoma 其他问题登录Apple帐户 &#xff1a; MOBILEME_C…

Unity类银河恶魔城学习记录12-7-1 p129 Craft UI - part 1源代码

Alex教程每一P的教程原代码加上我自己的理解初步理解写的注释&#xff0c;可供学习Alex教程的人参考 此代码仅为较上一P有所改变的代码 【Unity教程】从0编程制作类银河恶魔城游戏_哔哩哔哩_bilibili UI_CraftList.cs using System.Collections; using System.Collections.Gen…

Composer Windows 安装

Composer 的下载地址为&#xff1a;Composer 1 运行安装程序 当启动安装程序后单击下一步继续。 选择 PHP 路径 如果你的计算机上没有安装 PHP 的话&#xff0c;Composer 的安装无法继续。 你需要选择你本地安装的 PHP 路径。 配置代理地址 默认的情况下&#xff0c;可以不…

一个项目的SpringCloud微服务改造过程

SSO是公司一个已经存在了若干年的项目&#xff0c;后端采用SpringMVC、MyBatis&#xff0c;数据库使用MySQL&#xff0c;前端展示使用Freemark。今年&#xff0c;我们对该项目进行了一次革命性的改进&#xff0c;改造成SpringCloud架构&#xff0c;并且把前后端分离&#xff0c…

ES6中 Promise的详细讲解

文章目录 一、介绍状态特点流程 二、用法实例方法then()catchfinally() 构造函数方法all()race()allSettled()resolve()reject() 三、使用场景# 参考文献 一、介绍 Promise&#xff0c;译为承诺&#xff0c;是异步编程的一种解决方案&#xff0c;比传统的解决方案&#xff08;…

四大生成式模型的比较——GAN、VAE、归一化流和扩散模型

比较四大模型的本质 four modern deep generative models: generative adversarial networks, variational autoencoders, normalizing flows, and diffusion models 待写