README.md 4.9 KB
Newer Older
W
4.2.0  
wangliang 已提交
1
# LCN分布式事务框架v4.0 
W
commit  
wangliang 已提交
2

W
update  
wangliang 已提交
3
  "LCN并不生产事务,LCN只是本地事务的协调者"
L
lorne 已提交
4
  
W
wangliang 已提交
5

L
lorne 已提交
6 7
## 框架介绍   

W
update  
wangliang 已提交
8
  LCN分布式事务框架的核心功能是对本地事务的协调控制,框架本身并不创建事务,只是对本地事务做协调控制。因此该框架与其他第三方的框架兼容性强,支持所有的关系型数据库事务,支持多数据源,支持与第三方数据库框架一块使用(例如 sharding-jdbc),在使用框架的时候只需要添加分布式事务的注解即可,对业务的侵入性低。LCN框架主要是为微服务框架提供分布式事务的支持,在微服务框架上做了进一步的事务机制优化,在一些负载场景上LCN事务机制要比本地事务机制的性能更好,4.0以后框架开方了插件机制可以让更多的第三方框架支持进来。
L
lorne 已提交
9 10


W
readme  
wangliang 已提交
11
## 官方网址
W
wangliang 已提交
12

L
lorne 已提交
13
[https://www.txlcn.org](https://www.txlcn.org)
W
readme  
wangliang 已提交
14 15 16 17 18


## 框架特点

1. 支持各种基于spring的db框架
W
wangliang 已提交
19
2. 兼容SpringCloud、Dubbo、motan
W
readme  
wangliang 已提交
20 21
3. 使用简单,低依赖,代码完全开源
4. 基于切面的强一致性事务框架
W
wangliang 已提交
22
5. 高可用,模块可以依赖RPC模块做集群化,TxManager也可以做集群化
W
readme  
wangliang 已提交
23 24
6. 支持本地事务和分布式事务共存
7. 支持事务补偿机制,增加事务补偿决策提醒
W
wangliang 已提交
25
8. 添加插件拓展机制
W
readme  
wangliang 已提交
26 27 28 29


## 原理介绍

L
lorne 已提交
30
[原理介绍](https://github.com/codingapi/tx-lcn/wiki)  [视频讲解](https://www.txlcn.org/v4/index.html)
W
readme  
wangliang 已提交
31 32 33 34 35 36 37

## 目录说明

transaction-dubbo LCN dubbo rpc框架扩展支持

transaction-springcloud LCN springcloud rpc框架扩展支持

W
wangliang 已提交
38 39
transaction-motan LCN motan rpc框架扩展支持

W
readme  
wangliang 已提交
40 41 42 43 44 45 46 47 48 49
tx-client 是LCN核心tx模块端控制框架

tx-manager 是LCN 分布式事务协调器

tx-plugins-db 是LCN 对关系型数据库的插件支持


## 使用说明

分布式事务发起方:
W
readme  
wangliang 已提交
50

W
wangliang 已提交
51 52
```

W
readme  
wangliang 已提交
53
    @Override
W
wangliang 已提交
54
    @TxTransaction(isStart=true)
W
readme  
wangliang 已提交
55 56 57 58 59 60 61 62 63 64 65 66 67
    @Transactional
    public boolean hello() {
        //本地调用
        testDao.save();
        //远程调用方
        boolean res =  test2Service.test();
        //模拟异常
        int v = 100/0;
        return true;
    }
    
    
```
W
wangliang 已提交
68

W
readme  
wangliang 已提交
69
分布式事务被调用方(test2Service的业务实现类)
W
readme  
wangliang 已提交
70 71
```

W
readme  
wangliang 已提交
72 73
    @Override
    @Transactional
W
wangliang 已提交
74
    @TxTransaction
W
readme  
wangliang 已提交
75 76 77 78 79 80 81 82 83
    public boolean test() {
        //本地调用
        testDao.save();
        return true;
    }

```

如上代码执行完成以后两个模块都将回滚事务。
W
readme  
wangliang 已提交
84

W
update  
wangliang 已提交
85
说明:在使用LCN分布式事务时,只需要将事务的开始方法添加`@TxTransaction(isStart=true)`注解即可,在参与方添加`@TxTransaction`或者实现`ITxTransaction`接口即可。详细见demo教程
W
readme  
wangliang 已提交
86

L
lorne 已提交
87 88 89 90
## 关于@TxTransaction 使用说明

  @TxTransaction注解是分布式事务的标示。
  
W
update  
wangliang 已提交
91
  若存在业务方法:a->b b->c b->d,那么开启分布式事务注解的话,需要在各个模块方法上添加@TxTransaction即可。
L
lorne 已提交
92
  
W
wangliang 已提交
93
```
W
wangliang 已提交
94
    @TxTransaction(isStart=true)
L
lorne 已提交
95 96 97 98
    @Transactional
    public void a(){
        b();
    }
W
wangliang 已提交
99 100
    
    @TxTransaction
L
lorne 已提交
101 102 103 104
    public void b(){
        c();
        d();
    }
W
wangliang 已提交
105 106
    
    @TxTransaction
L
lorne 已提交
107
    public void c(){}
W
wangliang 已提交
108 109
    
    @TxTransaction
L
lorne 已提交
110 111
    public void d(){}
```
W
readme  
wangliang 已提交
112

W
wangliang 已提交
113 114
## maven 中心库地址

115

W
wangliang 已提交
116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151
```
<dependency>
    <groupId>com.codingapi</groupId>
    <artifactId>tx-client</artifactId>
    <version>${lcn.last.version}</version>
</dependency>


<dependency>
    <groupId>com.codingapi</groupId>
    <artifactId>tx-plugins-db</artifactId>
    <version>${lcn.last.version}</version>
</dependency>


<dependency>
    <groupId>com.codingapi</groupId>
    <artifactId>transaction-dubbo</artifactId>
    <version>${lcn.last.version}</version>
</dependency>      

<dependency>
    <groupId>com.codingapi</groupId>
    <artifactId>transaction-motan</artifactId>
    <version>${lcn.last.version}</version>
</dependency>  


<dependency>
    <groupId>com.codingapi</groupId>
    <artifactId>transaction-springcloud</artifactId>
    <version>${lcn.last.version}</version>
</dependency>    
        
```

152 153 154 155
依赖gradle等形式,见中心库   

[http://mvnrepository.com/search?q=codingapi](http://mvnrepository.com/search?q=codingapi)

W
wangliang 已提交
156

W
readme  
wangliang 已提交
157
## demo演示教程
W
readme  
wangliang 已提交
158

W
readme  
wangliang 已提交
159
每个demo下有区分为 jdbc/hibernate/mybatis不同框架的版本demo
W
readme  
wangliang 已提交
160

W
readme  
wangliang 已提交
161
[springcloud版本](https://github.com/codingapi/springcloud-lcn-demo)
W
readme  
wangliang 已提交
162

W
readme  
wangliang 已提交
163
[dubbo版本](https://github.com/codingapi/dubbo-lcn-demo)
W
readme  
wangliang 已提交
164

L
lorne 已提交
165
[motan版本](https://gitee.com/zfvipCase/motan-lcn-demo)
W
readme  
wangliang 已提交
166

L
lorne 已提交
167 168
[txc模式](https://github.com/caisirius/test-lcn-dubbo)

L
lorne 已提交
169 170 171 172 173 174 175 176
## 5.0 研发中. 
1.  将基于springboot 2.0研发,将替换groupId传递机制,由sleuth机制处理。(https://cloud.spring.io/spring-cloud-sleuth/2.0.x/single/spring-cloud-sleuth.html)
2.  将抽离LCN封装业务,提出业务接口层与通讯层,将可支持自定义分布式事务模式与通讯模式。
3.  将支持LCN TXC TCC 三种事务模式,且可混合支持。
4.  优化线程等待机制,提高吞吐量。
5.  将提供更加完备的官方文档,类似sleuth文档形式。


L
lorne 已提交
177
技术交流群:554855843(已满) 970071379(未满)