![](https://img-blog.csdnimg.cn/20201014180756916.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
分布式事物
文章平均质量分 69
jackson陈
这个作者很懒,什么都没留下…
展开
-
TX-LCN分布式事务框架应用与解析-1实际生产事故
公司最近正在做微服务拆分,有一个需求是这样的,要单独开发一个服务,所有公司用到的用户部分,都由其负责创建、修改;比如原来有A,B两个系统,每个系统都有用户注册与修改,现在要新开发一个系统C,把A,B两个系统的用户注册与修改内容都单独出来放到C中,C有用户表,C也可以登录。但是A,B两个系统的用户表还是存在的,只是创建与修改都由C系统去调用A,B的接口,以到达数据的同步。这其中涉及到分布式事务的问题...原创 2019-04-24 15:17:20 · 670 阅读 · 0 评论 -
TX-LCN分布式事务框架源码解析(基于lcn模式下的异常流程源码分析)
前一篇文章我们讲了lcn模式下的正常流程是如何运作的。这篇讲下在发生异常时框架是怎么进行回滚的,同样调用链还是A>B>C正常流程图是这样的,前一个模块的doBusinessCode执行的是后一个模块的所有逻辑。我们从后向前看C模块的所有的代码执行都在B模块的doBusinessCode方法中。B模块的代码执行都在A模块的doBusinessCode方法中。C模块...原创 2019-07-02 15:27:01 · 3315 阅读 · 1 评论 -
TX-LCN分布式事务框架源码解析(客户端-@EnableDistributedTransaction执行流程)
有了前面服务端的基础,客户端代码比较好理解,在一些方面代码是一样的。我们从注解@EnableDistributedTransaction开始,这个注解是开启事物客户端的唯一注解。@Retention(RetentionPolicy.RUNTIME)@Target(ElementType.TYPE)@Documented@Import(value = {TCAutoConfigura...原创 2019-06-18 10:57:39 · 4531 阅读 · 0 评论 -
TX-LCN分布式事务框架源码解析(服务端-5-TxLcnInitializer初始化之TMAutoCluster)
最后一个TxLcnInitializer。TMAutoCluster从名称上看是自动集群,当我们启动一个新的服务端时,不用额外的配置也不需要重新启动客户端。所有的客户端都会感知到新的服务端并且与之链接。整体的逻辑是这样的,如果启动一个服务端A,启动时这个A会把自己的信息存入redis的hash中,hash为tm.instances,hk为host:TransactionPort,hv为Ht...原创 2019-06-17 10:18:41 · 580 阅读 · 0 评论 -
TX-LCN分布式事务框架源码解析(服务端-4-TxLcnInitializer初始化之RpcNettyInitializer)
这个内容很少,但是前面都分开写了这里就为它写一篇public void init() throws Exception { RpcCmdContext.getInstance().setRpcConfig(rpcConfig); SocketManager.getInstance().setRpcConfig(rpcConfig); }主要就是Rp...原创 2019-06-14 13:49:11 · 387 阅读 · 0 评论 -
TX-LCN分布式事务框架源码解析(服务端-3-TxLcnInitializer初始化之EnsureIdGenEngine)
上篇讲了TMRpcServer的init方法,按照执行顺序接下来的TxLcnInitializer类是EnsureIdGenEngine这是一个id生成器类,用来生成机器id号下面看init方法public void init() throws Exception { managerConfig.applyMachineId(managerService.machin...原创 2019-06-14 13:41:20 · 604 阅读 · 0 评论 -
TX-LCN分布式事务框架源码解析(服务端-2-TxLcnInitializer初始化之TMRpcServer)
上篇文章我们通过注解@EnableTransactionManagerServer了解了服务端的启动初始化流程。最重要的TxLcnInitializer#init我们在本篇文章详细说明先看下服务端实现了TxLcnInitializer接口的类有哪些一共有五个实现类分别是EnsureIdGenEngine类,用于处理和生成全局唯一idMysqlLoggerHelper类,用于记录...原创 2019-06-13 15:56:24 · 1543 阅读 · 1 评论 -
netty 中LengthFieldPrepender与LengthFieldBasedFrameDecoder
这两个类通常一起使用来解决半包与粘包的问题LengthFieldPrepender编码器作用:将当前发送消息的二进制字节长度,添加到缓冲区头部;这样消息就有了固定长度,长度存储在缓冲头中构造方法public LengthFieldPrepender(int lengthFieldLength, boolean lengthIncludesLengthFieldLength) {...原创 2019-06-05 10:44:26 · 2306 阅读 · 2 评论 -
TX-LCN分布式事务框架源码解析(服务端-1-@EnableTransactionManagerServer执行流程)
前面的代理都是为了写源码做铺垫的,因为LCN模式就是用的静态代理,采用对数据库连接的代理来完成分布式事务的。首先看我们的服务端,前面在例子中已经把服务端和客户端的代码都贴出来了,服务端很简单,只需要一个注解就能开启分布式事务服务端功能。注解@EnableTransactionManagerServer@Retention(RetentionPolicy.RUNTIME)@Ta...原创 2019-05-27 15:27:09 · 1609 阅读 · 0 评论 -
TX-LCN分布式事务框架应用与解析-2例子
简单的看下例子:采用spring boot ,需要redis,mysql,zookeeper(我们是用的这个做注册中心,可以换成其他的),详细见官网。manager工程用于协调分布式服务启动类加上注解@EnableTransactionManagerServer@SpringBootApplication@EnableTransactionManagerServerpubli...原创 2019-04-24 16:33:38 · 1369 阅读 · 0 评论 -
TX-LCN分布式事务框架源码解析(基于lcn模式下的正常流程源码分析)
TX-LCN中的LCN模式是通过代理数据库连接进而对事物进行控制的。通过静态代理的方式包装的原本来的connection,设置为手动提交,根据事物状态控制提交与回滚。所以如果用LCN模式的分布式事务,必须有本地连接,即要操作本地数据库。(当然也可以多种模式混合使用)代理连接如下,state为事务状态,1为分布式事务成功本地链接提交,其他为失败进行本地链接回滚public class ...原创 2019-06-28 14:32:37 · 4014 阅读 · 3 评论