Seata 术语 TC (Transaction Coordinator) - 事务协调者 维护全局和分支事务的状态,驱动全局事务提交或回滚。 TM (Transaction Manager) - 事务管理器 定义全局事务的范围:开始全局事务、提交或回滚全局事务。 RM (Resource Manager) - 资源管理器 管理分支事务处理的资源,与 TC 交谈以注册分支事务和报告分支事务的状态,并驱动分支事务提交或回滚。 原理图

分布式事务seata
Seata 是什么 Seata 是一款开源的分布式事务解决方案,致力于提供高性能和简单易用的分布式事务服务。Seata 将为用户提供了 AT、TCC、SAGA 和 XA 事务模式,为用户打造一站式的分布式解决方案。AT 模式是阿里首推的模式,阿里云上有商用版本的 GTS(Global Transaction Service 全局事务服务) 官网:https://seata.io/zh-cn/index.html 源码: https://github.com/seata/seata 官方 Demo: https://github.com/seata/seata-samples seata 版本:v1.4.0 Seata 的三大角色 在 Seata 的架构中,一共有三个角色 TC (Transaction Coordinator) - 事务协调者 维护全局和分支事务的状态,驱动全局事务提交或回滚。 TM (Transaction Manager) - 事务管理器 定义全局事务的范围:开始全局事务、提交或回滚全局事务。 RM (Resource Manager) - 资源管理器 管理分支事务....

spel实现复杂权限控制
权限控制中引入 SpEL 来让复杂的权限控制变的更简单,更灵活。 博客转载: juejin.cn/post/7226674759626571833 1 前言 对于在 SpringBoot 中,利用自定义注解 + 切面来实现接口权限的控制这个大家应该都很熟悉,也有大量的博客来介绍整个的实现过程,整体来说思路如下: 自定义一个权限校验的注解,包含参数 value 配置在对应的接口上 定义一个切面类,指定切点 在切入的方法体里写上权限判断的逻辑 乍一看,没毛病,学到了,学到了~,收藏起来。但是呢,等到实际用到的时候就傻眼了,为什么呢?在实际的开发中,你会发现,对于权限校验的需求场景是很多的,比如: 只要配置了任何角色,就可以访问 有某个权限就可以访问 放行所有请求 只有超级管理员角色才可以访问 只有登录后才可以访问 在指定时间段内可以访问 有某个角色的情况下才可以访问 同时具有指定的多个角色情况下才可以访问 傻眼了不,按照上面的实现逻辑的话怎么搞?加注解?写各种判断?这时候,其实我们就可以通过 SpEL 表达式来帮我们处理这个问题。 2SpEL 表达式 本文前面提到 SpEL,那么到底 Sp....

手写Spring Tx
背景 手写 Spring 进行到了事务了,上 2 篇文章介绍了手写 Spring IOC,spring Aop,这篇文章在介绍手写 Spring tx 概述 事务管理对于企业应用来说是至关重要的,即使出现异常情况,它也可以保证数据的一致性。 Spring Framework 对事务管理提供了一致的抽象,其特点如下: 为不同的事务 API 提供一致的编程模型,比如 JTA(Java Transaction API), JDBC, Hibernate, JPA(Java Persistence API 和 JDO(Java Data Objects) 支持声明式事务管理,特别是基于注解的声明式事务管理,简单易用 提供比其他事务 API 如 JTA 更简单的编程式事务管理 API 与 Spring 数据访问抽象的完美集成 流程实现 从图中我们能够知道 Spring Tx 也是通过 AOP 增强,反射代理生成一个代理对象,进行对业务方法增强,处理我们的事务 有时候我们会在一个方法里面执行多个 SQL 语句,要想保证事务,必须保证这些是在同一个 connection 连接,同一个事务,这样回滚才....

手写spring AOP
背景 基于上次手写一个 mini 版的 Spring IoC,考虑把 AOP 也给接入进来 AOP 回顾 AOP 概念 AOP(Aspect Oriented Programming)是面向切面编程。是 OOP 面向对象编程思想的一种补充。 OOP 通过继承,封装,多态等概念构建一个对象的层级结构。构建的是一个纵向的关系。面对横向的问题,实现起来比较复杂,比如日志的输出。使用面向对象的思想,每个类都需要增加日志打印的相关代码。但是使用 aop 就可以很简单的解决这个问题。 aop 将影响了多个类的公共行为(如日志打印)封装为一个可重用模块,定义为一个切面(aspect)。切面中包括切入点,通知,连接点等概念。 切入点:就是需要做切面处理的位置,可以通过 @PointCut 中的 execution 值指定某个包,某个类或者某个方法。同时也可以使用自定义注解标注。 通知:包括 5 种,分别是前置,后置,返回,异常,环绕通知。分别定义增强代码执行的时机。 连接点:是可以用来做为切入点的位置。是程序执行的某个位置,可以为程序执行前,也可以是执行后或者抛出异常等一些时机点 aop 作用是降低程....

Sentinel核心架构源码剖析
笔记链接: https://note.youdao.com/s/ChW1Ja5q

Sentinel规则持久化源码分析
该文章已经加密。