![](https://img-blog.csdnimg.cn/4c89b019b57d412fa2fbf27dc515ba81.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
SpringCloud
文章平均质量分 58
本专栏是用来学习SpringCloud+Spring Cloud Alibaba的,本人使用的是Macos系统(非M1芯片),专栏中使用到软件都是在Macos上运行的。
临水而愚
滴水穿石,事在人为。
展开
-
SpringCloud-组件总结(Day16)
组件简介分类官网EurekaEureka is the Netflix Service Discovery Server and Client服务注册中心官网ZookeeperZooKeeper is a centralized service for maintaining configuration information, naming, providing distributed synchronization, and providing group serv...原创 2022-01-19 11:40:48 · 118 阅读 · 0 评论 -
SpringCloud-Seata原理解析(Day16)
Seata架构图执行流程TM开启分布式事务(TM向TC注册全局事务记录) ;按业务场景,编排数据库、服务等事务内资源(RM向TC汇报资源准备状态) ;TM结束分布式事务,事务一阶段结束(TM通知TC提交/回滚分布式事务) ;TC汇总事务信息,决定分布式事务是提交还是回滚;TC通知所有RM提交/回滚资源,事务二阶段结束。AT模式的历程流程第一阶段(在每一个分库下完成,保证原子性)我们已经配置了代理数据源,也就是Seata会第一时间拦截到业务SQL,当其获取到业务SQL后就会执行一下三个原创 2022-01-15 15:35:38 · 656 阅读 · 0 评论 -
SpringCloud-Seata分布式事务服务案例之测试案例(Day16)
正常的请求情况(没有使用Seata)订单表账户表库存表异常的请求情况(没有使用Seata)我们通过修改代码的方式来模拟异常的情况,在账户模块的控制层设置Sleep,使其超过Feign的调用时间,使其调用超时./** * 扣减账户余额 */@RequestMapping("/account/decrease")public CommonResult decrease(@RequestParam("userId") Long userId, @RequestParam("money.原创 2022-01-15 14:49:27 · 270 阅读 · 0 评论 -
SpringCloud-Seata分布式事务服务案例之账户Account服务搭建(Day16)
搭建seata-account-service2003账户模块pom文件的编辑<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.o原创 2022-01-09 21:41:05 · 445 阅读 · 0 评论 -
SpringCloud-Seata分布式事务服务案例之库存Storage服务搭建(Day16)
搭建seata-storage-service2002库存服务模块pom文件的编辑<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache原创 2022-01-09 21:22:39 · 264 阅读 · 0 评论 -
SpringCloud-Seata分布式事务服务案例之订单Order服务搭建(Day16)
订单服务解析我们的总服务接口是需要与三个微服务模块单独分开的,但是此案例有没有那么复杂,所以我们就将对外提供全面服务的接口放在订单模块中,其次我们来分析一下这个订单Order模块应该有哪些功能:创建订单记录,需要注意的是我们需要获取到插入订单信息的主键ID,即链式调用.状态为创建中.调用库存模块和账户模块进行相应的扣减更改订单信息的状态为已完结.搭建seata-order-service2001订单服务模块pom文件的编辑<?xml version="1.0" encoding原创 2022-01-09 20:53:36 · 426 阅读 · 0 评论 -
SpringCloud-Seata分布式事务服务案例架构分析和数据库准备(Day16)
Seata分布式服务案例架构分析这里我们会创建三个服务,一个订单服务Order,一个库存服务Storage,一个账户服务Account。当用户下单时,会在订单服务中创建一个订单, 然后通过远程调用库存服务来扣减下单商品的库存,然后再通过远程调用账户服务来扣减用户账户里面的余额,最后在订单服务中修改订单状态为已完成。这个操作会跨越三个数据库,有两次远程调用,很明显会有分布式事务问题。即下订单—>扣库存—>减账户(余额)。业务数据库准备CREATE DATABASE seata_order;原创 2021-12-29 15:48:41 · 1708 阅读 · 0 评论 -
SpringCloud-Seata分布式事务服务(Day16)
Seata介绍Seata(Simple Extensible Autonomous Transaction Architecture)即简单可扩展自治事务框架,是由蚂蚁金服和阿里巴巴共同开源的分布式事务解决方案,Seata致力于在微服务架构下提供高性能和简单易用的分布式事务服务。Seata组件术语Transaction ID XID 全局唯一的事务IDTC (Transaction Coordinator) - 事务协调者维护全局和分支事务的状态,驱动全局事务提交或回滚。TM (Tran原创 2021-12-27 16:51:56 · 384 阅读 · 0 评论 -
SpringCloud-Sentinel的规则持久化以及和Hystrix的对比(Day15)
Sentinel规则持久化pom<!--SpringCloud ailibaba sentinel-datasource-nacos sentinel做持久化用到--><dependency> <groupId>com.alibaba.csp</groupId> <artifactId>sentinel-datasource-nacos</artifactId></dependency>ymls原创 2021-12-24 14:05:04 · 2249 阅读 · 0 评论 -
SpringCloud-Sentinel和Feign的整合(Day15)
整合Sentinel和Feignpom<!--SpringCloud openfeign --><dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign</artifactId></dependency>yml# 激活Sentinel对Feign的支持原创 2021-12-24 10:27:59 · 2059 阅读 · 0 评论 -
SpringCloud-Sentinel的服务熔断(Day15)
无任何配置时我们当前没有配置对服务的降级和限流,所以如果当接口出现异常时就会直接将异常打印到前端。只配置fallback时原创 2021-12-24 09:51:28 · 2206 阅读 · 0 评论 -
SpringCloud-Sentinel的服务熔断环境准备(Day14)
创建支付模块cloudalibaba-provider-payment9003/9004支付模块cloudalibaba-provider-payment9003和支付模块cloudalibaba-provider-payment9004,的代码是一样的,只有服务端口不同。本篇只介绍一个支付模块即可。设置支付模块的pom<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/P原创 2021-12-22 16:51:32 · 2286 阅读 · 0 评论 -
SpringCloud-Sentinel的@SentinelResource注解(Day14)
@SentinelResource注解@SentinelResource 用于定义资源,并提供可选的异常处理和 fallback 配置项。value:资源名称,必需项(不能为空entryType:entry 类型,可选项(默认为 EntryType.OUT)blockHandler / blockHandlerClass: blockHandler 对应处理 BlockException 的函数名称,可选项。blockHandler 函数访问范围需要是 public,返回类型需要与原方法相匹配,参原创 2021-12-22 11:48:09 · 2324 阅读 · 0 评论 -
SpringCloud-Sentinel系统规则(Day13)
系统规则Sentinel 系统自适应限流从整体维度对应用入口流量进行控制,结合应用的 LOAd、CPU 使用率、总体平均 RT、入口 QPS 和并发线程数等几个维度的监控指标,通过自适应的流控策略,让系统的入口流量和系统的负载达到一个平衡,让系统尽可能跑在最大吞吐量的同时保证系统整体的稳定性。系统保护规则是应用整体维度的,而不是资源维度的,并且仅对入口流量生效。入口流量指的是进入应用的流量。Load 自适应(仅对 Linux/Unix-like 机器生效):系统的 load1 作为启发指标,进行自适原创 2021-12-21 16:44:48 · 1968 阅读 · 0 评论 -
SpringCloud-Sentinel热点规则(Day13)
热点规则热点即用户经常访问的数据。我们希望统计某个热点数据中访问频次最高的 数据,并对其访问进行限制。如下图所展示的案例。热点限流会统计传入参数中的热点参数,并根据配置的限流阈值的设置模式,对包含热点参数的资源调用请求进行限流。热点限流可以看做是一种特殊的流量控制,仅对包含热点参数的资源调用请求生效。Sentinel 利用 LRU 策略统计最近最常访问的热点参数,结合令牌桶算法来进行参数级别的流。控制层代码 @GetMapping("/testHotKey") @SentinelRe原创 2021-12-21 16:15:16 · 2205 阅读 · 0 评论 -
SpringCloud-Sentinel降级规则(Day13)
降级规则Sentinel熔断降级会在调用链路中某个资源出现不稳定状态时(例如调用超时或异常比例升高),对这个资源的调用进行限制,让请求快速失败,避免影响到其它的资源而导致级联错误。当资源被降级后,在接下来的降级时间窗口之内,对该资源的调用都自动熔断(默认行为是抛出 DegradeException)。Sentinei的断路器是没有类似Hystrix半开状态的。(Sentinei 1.8.0 已有半开状态) 半开的状态系统自动去检测是否请求有异常,没有异常就关闭断路器恢复使用,有异常则继续打开断路器不可用。原创 2021-12-20 17:08:09 · 2278 阅读 · 0 评论 -
SpringCloud-Sentinel流控规则(Day12)
Sentinel流控规则简介资源名唯一名称,默认请求路径。针对来源Sentinel可以针对调用者进行限流,填写微服务名,默认default(不区分来源)。阈值类型QPS : 当调用该API的QPS达到单机阈值的时候,进行限流。线程数 : 当调用该API的线程数达到单机阈值的时候,进行限流。流控模式直接:API达到限流条件时,直接限流。关联:当关联的资源达到阈值时,就限流自己。只记录指定链路上的流量(指定资源从入口资源进来的流量,如果达到阈值,就进行限流流控效果快速失败:原创 2021-12-17 17:15:52 · 4031 阅读 · 0 评论 -
SpringCloud-SpringCloud Alibaba Sentinel服务哨兵初步的运行以及与Nacos的整合(Day12)
Sentinel本机安装与运行说明我们使用的环境需要和学习的教程保持一致,我去Sentinel官网下载了1.7.0的jar包,具体的安装包和代码可以到我的码云去下载,其中使用的安装包放在了ApplicationFiles文件夹下。初步的单机安装和使用java -jar sentinel-dashboard-1.7.0.jar 运行后打开浏览器搜索http://127.0.0.1:8080即可进入到登录界面,登录界面的账号和密码都是nacos创建Sentinel和Nacos整合模块cloud原创 2021-12-17 16:09:28 · 4173 阅读 · 0 评论 -
SpringCloud-SpringCloud Alibaba Sentinel服务哨兵简介(Day12)
Sentinel服务哨兵随着微服务的流行,服务和服务之间的稳定性变得越来越重要。Sentinel 以流量为切入点,从流量控制、熔断降级、系统负载保护等多个维度保护服务的稳定性。丰富的应用场景:Sentinel 承接了阿里巴巴近 10 年的双十一大促流量的核心场景,例如秒杀(即突发流量控制在系统容量可以承受的范围)、消息削峰填谷、集群流量控制、实时熔断下游不可用应用等。完备的实时监控:Sentinel 同时提供实时的监控功能。您可以在控制台中看到接入应用的单台机器秒级数据,甚至 500 台以下规模的集原创 2021-12-17 14:57:33 · 3770 阅读 · 0 评论 -
SpringCloud-Spring Cloud Alibaba Nacos集群架构(Day11)
Nacos集群架构nacos默认自带的是嵌入式数据库derby,在0.7版本之前,在单机模式时nacos使用嵌入式数据库实现数据的存储,不方便观察数据存储的基本情况。0.7版本增加了支持mysql数据源能力,具体的操作步骤:安装数据库,版本要求:5.6.5+初始化mysq数据库,数据库初始化文件: nacos-mysql.sql修改conf/application.properties文件,增加支持mysql数据源配置(目前只支持mysql),添加mysql数据源的url、用户名和密码。##原创 2021-12-16 17:32:56 · 7090 阅读 · 1 评论 -
SpringCloud-Spring Cloud Alibaba Nacos服务配置中心(Day11)
Nacos服务配置中心模型其架构思想如下图所示创需配置模块cloudalibaba-config-nacos-client3377更改需配置模块的pom<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"原创 2021-12-16 16:55:56 · 4566 阅读 · 0 评论 -
SpringCloud-Spring Cloud Alibaba Nacos服务注册中心对比(Day11)
Nacos生态全景图Nacos与其他注册中心对比Nacos服务发现实例模型原创 2021-12-16 16:15:45 · 4464 阅读 · 0 评论 -
SpringCloud-Spring Cloud Alibaba Nacos服务注册之消费模块注册(Day11)
我们之前已经创建了cloudalibaba-provider-payment9001,我们仿照这个支付模块创建cloudalibaba-provider-payment9002。目的是为了创建多个提供微服务的实例。创建消费模块cloudalibaba-consumer-nacos-order9083更改消费模块的pom<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/PO原创 2021-12-16 16:04:16 · 4634 阅读 · 0 评论 -
SpringCloud-Spring Cloud Alibaba Nacos服务注册之生产模块注册(Day11)
创建支付模块cloudalibaba-provider-payment9001更改支付模块的pom<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://mave原创 2021-12-16 15:35:01 · 4583 阅读 · 0 评论 -
SpringCloud-Spring Cloud Alibaba Nacos服务注册和配置中心(Day11)
说明由于需要和学习的教程保持一致,我去Nacos官网下载了1.1.4的安装包,具体的安装包和代码可以到我的码云去下载,其中使用的安装包放在了ApplicationFiles文件夹下。初步的单机安装和使用tar -zxvf nacos-server-1.1.4.tar.gzrm -r -f nacos-server-1.1.4.tar.gzcd nacos/bin./startup.sh安装完成后打开浏览器搜索http://127.0.0.1:8848/nacos即可进入到登录界面,登录界面的原创 2021-12-16 15:18:42 · 4434 阅读 · 0 评论 -
SpringCloud-Spring Cloud Sleuth服务跟踪使用案例(Day10)
改造已有程序改造cloud-consumer-order8080pom添加依赖<!--包含了sleuth+zipkin--><dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-zipkin</artifactId></dependency>yml添加配置sprin原创 2021-12-16 10:08:33 · 6340 阅读 · 0 评论 -
SpringCloud-Spring Cloud Sleuth服务跟踪(Day10)
Sleuth介绍在微服务框架中,一个由客户端发起的请求在后端系统中会经过多个不同的的服务节点调用来协同产生最后的请求结果,每一个前段请求都会形成一条复杂的分布式服务调用链路,链路中的任何一环出现高延时或错误都会引起整个请求最后的失败。我们通过使用Sleuth来监控各个微服务之间的调用逻辑,通过对调用的分析以及其调用链路Sleuth设计思路—条链路通过Trace ld唯一标识,Span标识发起的请求信息,各span通过parent id关联起来,每个节点都记录自己的标识以及其父级的标识Trac原创 2021-12-15 20:50:44 · 4892 阅读 · 0 评论 -
SpringCloud-SpringCloud Stream消息驱动之多消费者(Day10)
架构解析我们目前的架构是一个消费者对应一个生产者,我们需要设置多个消费者,其中需要确定的问题是,是否会有消息重复消费的问题以及消息持久化的问题。由于我们之前已经创建了一个信息消费者cloud-stream-rabbitmq-consumer8802,我们参照这个消费模块创建cloud-stream-rabbitmq-consumer8803。由于过程不太复杂,我这里也就不一一截图展示了。运行我们启动Eureka服务端,一个生产模块,两个消费模块,然后调用生产模块接口四次。生产者8801消费者8原创 2021-12-15 17:30:01 · 6106 阅读 · 0 评论 -
SpringCloud-SpringCloud Stream消息驱动之消息消费者(Day10)
创建消息消费模块cloud-stream-rabbitmq-consumer8802更改消费模块的pom<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://m原创 2021-12-15 16:49:19 · 5947 阅读 · 0 评论 -
SpringCloud-SpringCloud Stream消息驱动之消息生产者(Day10)
创建消息生产模块cloud-stream-rabbitmq-provider8801更改生产模块的pom<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://m原创 2021-12-15 16:15:50 · 5466 阅读 · 0 评论 -
SpringCloud-SpringCloud Stream消息驱动的介绍(Day10)
SpringCloud StreamSpringCloud官方定义Spring Cloud Stream是一个构建消息驱动微服务的框架。应用程序通过inputs或者 outputs 来与Spring Cloud Stream中binder对象交互。通过我们配置来binding(绑定),而Spring Cloud Stream 的binder对象负责与消息中间件交互。所以,我们只需要搞清楚如何与Spring Cloud Stream交互就可以方便使用消息驱动的方式。Spring Cloud Stream为一原创 2021-12-15 15:21:11 · 5891 阅读 · 0 评论 -
SpringCloud-SpringCloud Bus服务总线的实际使用(Day9)
安装RabbitMQ**因为我之前已经学过RabbirMQ了,我这里放出CentOS7安装RabbitMQ的链接原创 2021-12-14 17:14:58 · 5699 阅读 · 0 评论 -
SpringCloud-SpringCloud Bus服务总线的介绍(Day9)
Spring Cloud Bus服务总线在微服务架构的系统中,通常会使用轻量级的消息代理来构建一个共用的消息主题,并让系统中所有微服务实例都连接上来。由于该主题中产生的消息会被所有实例监听和消费,所以称它为消息总线。在总线上的各个实例,都可以方便地广播一些需要让其他连接在该主题上的实例都知道的消息。Spring Cloud Bus配合Spring Cloud Config使用可以实现配置的动态刷新。Spring Cloud Bus是用来将分布式系统的节点与轻量级消息系统链接起来的框架,它整合了Java的原创 2021-12-14 15:02:25 · 5710 阅读 · 1 评论 -
SpringCloud-SpringCloud Config客户端动态刷新(Day9)
SpringCloud Config客户端配置动态刷新上一篇我们发现,我们在gitee中修改了yml的参数,但是config客户端的配置并有刷新,只有config服务端的配置被刷新了。目前的解决办法是调用spring-boot-starter-actuator的接口对客户端的配置进行刷新,我个人认为这个地方是SpringCloud Config欠缺的地方,我们在修改完Gitee仓库的配置后还需要我们依次代用这个接口。SpringCloud Config修改bootstrap.ymlserver:原创 2021-12-14 11:37:15 · 6352 阅读 · 0 评论 -
SpringCloud-SpringCloud Config客户端应用(Day9)
创建SpringCloud Config客户端cloud-config-client3355编辑SpringCloud Config客户端pom<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:sche原创 2021-12-14 11:03:56 · 5631 阅读 · 0 评论 -
SpringCloud-SpringCloud Config的初步认识和服务端应用(Day9)
SpringCloud Config介绍微服务意味着要将单体应用中的业务拆分成一个个子服务,每个服务的粒度相对较小,因此系统中会出现大量的服务。由于每个服务都需要必要的配置信息才能运行,所以一套集中式的、动态的配置管理设施是必不可少的。Spring Cloud提供了Config Server来解决这个问题。SpringCloud Config为微服务架构中的微服务提供集中化的外部配置支持,配置服务器为各个不同微服务应用的所有环境提供了一个中心化的外部配置。SpringCloud Config服务架构原创 2021-12-14 10:02:35 · 5580 阅读 · 0 评论 -
SpringCloud-Gateway的Filter(Day8)
Filter介绍路由过滤器是用于修改进入的HTTP请求和返回的HTTP响应,路由过滤器只能指定路由进行使用。Spring Cloud Gateway内置了多种路由过滤器,他们都由Gateway Filter的工厂类来产生。编辑自定义过滤器(要求必须有参数args)package com.gcl.springcloud.filter;import lombok.Data;import lombok.extern.slf4j.Slf4j;import org.springframework.clo原创 2021-12-13 17:55:16 · 5861 阅读 · 0 评论 -
SpringCloud-Gateway的Predicate(Day8)
Predicate简介Spring Cloud Gateway将路由匹配作为Spring WebFlux HandlerMapping基础架构的一部分。Spring Cloud Gateway包括许多内置的Route Predicate工厂。所有这些Predicate都与HTTP请求的不同属性匹配。多个RoutePredicate工厂可以进行组合。Spring Cloud Gateway创建Route对象时,使用RoutePredicateFactory 创建 Predicate对象,Predica原创 2021-12-13 17:25:37 · 5795 阅读 · 0 评论 -
SpringCloud-Gateway配置动态路由(Day8)
配置动态路由配置动态路由,即我们使用服务注册的功能绑定微服务的服务名,这样不论支付模块的拓展还是消减都不会影响消费端的代码代码。第一种:websocket方式 :uri: ws://localhost:9000第二种:http方式 :uri: http://localhost:8130/第三种:lb(注册中心中服务名字)方式 :uri: lb://brilliance-consumer设置服务网关的ymlserver: port: 9527spring: applicati原创 2021-12-13 17:09:18 · 7443 阅读 · 0 评论 -
SpringCloud-Gateway使用代码配置路由(Day8)
代码方式配置路由上一篇我们的Gateway入门案例使用了yml的方式配置了路由。我们这一篇不在对这种方式进行介绍。重点介绍使用代码的方式进行路由配置。官方案例RemoteAddressResolver resolver = XForwardedRemoteAddressResolver .maxTrustedIndex(1);....route("direct-route", r -> r.remoteAddr("10.1.1.1", "10.10.1.1/24")原创 2021-12-13 16:53:21 · 6179 阅读 · 0 评论