## seata-async
这个项目是在实践过程中,发现seata在处理分布式事务的时候,维护性能的开销相对较大,并且其把调用纳入到全局事务体系是基于xid的传递。
基于以上需求,把seata的一些调用进行异步处理,可以实现异步+分布式事务的并存。
### 用法
#### 1. 本地打包
```shell script
mvn package install -U -DskipTests
```
#### 2. 在项目中引入依赖包
```xml
<dependency>
<groupId>cn.caohd</groupId>
<artifactId>seata-async</artifactId>
<version>0.1.0-SNAPSHOT</version>
</dependency>
```
#### 3. SpringBoot启动类中添加ComponentScan
```java
@SpringBootApplication(exclude = DataSourceAutoConfiguration.class)
// 添加这部分
@ComponentScan({"cn.caohd.seata.async.*"})
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
```
#### 4. 自动注入并且使用
```java
@Resource SeataAsyncUtil seataAsyncUtil;
/**
* 调用 times 次 userMapper,每次往数据库插入100条数据
* @param times 调用次数
* @return 插入成功的条数
*/
@GlobalTransactional
public int batchInsert(int times, int size) throws Exception {
// 旧写法
// int counter = 0;
// for (int i = 0; i < times; i++) {
// userMapper.batchInsert(buildRandomUsers(size));
// }
// return counter;
// 新写法
int counter = 0;
for (int i = 0; i < times; i++) {
seataAsyncUtil.async(() -> userMapper.batchInsert(buildRandomUsers(size)));
}
// 如果不关心返回值可以不用在这里get
for (SeataAsyncCallInfo<Integer> callInfo : SeataAysncCallContext.getAsyncInfos()) {
counter += callInfo.get();
}
return counter;
}
```
### 注意事项
1. 这个依赖只是用来解决部分问题,不是解决全部问题
2. 这个仅用于TM端,不要用来RM端(其实要实现RM端的话,可以仿照SeataAsyncAspect,写一个aspect,很简单的)
3. 不要进行事务嵌套,不支持事务嵌套
4. 确保异步的多个操作之间是没有先后顺序的
### 应用场景
1. 一个全局事务包含多个分支事务
2. 分支事务之间是没有执行的先后顺序的
### 性能测试报告
使用上面的例子测试,传入的times=50,seata-server的mode=db
如果使用同步的方式执行的话,用时约为3s
使用异步的方式测试的话,用时约800ms
免责声明:
1.本资源仅供学习和交流使用,不保证其准确性、完整性、及时性或适用性。
2.本资源仅包含一般信息,不构成专业建议。在使用本资源时,请务必自行研究并谨慎决策。
3.我已尽力确保本资源的正确性和合法性,但不对其准确性、完整性和及时性做出保证。
4.本资源不应用于商业用途。
5.在使用本资源的过程中,用户应自行承担所有风险和责任,并遵守相关法律法规。
6.对于因使用本资源而产生的任何损失或损害,我概不负责。
请确保在使用本资源时仔细阅读并遵守以上免责声明。如果您有任何疑问或需要进一步帮助,请联系我。
没有合适的资源?快使用搜索试试~ 我知道了~
基于seata+springboot的分布式事务项目源码.zip
共13个文件
java:9个
xml:1个
gitignore:1个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
5星 · 超过95%的资源 1 下载量 16 浏览量
2024-02-05
19:56:08
上传
评论
收藏 13KB ZIP 举报
温馨提示
这个项目是在实践过程中,发现seata在处理分布式事务的时候,维护性能的开销相对较大,并且其把调用纳入到全局事务体系是基于xid的传递。 基于以上需求,把seata的一些调用进行异步处理,可以实现异步+分布式事务的并存。 ### 用法 #### 1. 本地打包 ```shell script mvn package install -U -DskipTests ``` #### 2. 在项目中引入依赖包 ```xml <dependency> <groupId>cn.caohd</groupId> <artifactId>seata-async</artifactId> <version>0.1.0-SNAPSHOT</version> </dependency> ``` #### 3. SpringBoot启动类中添加ComponentScan ```java @SpringBootApplication(exclude = DataSourceAutoConfiguration.class) // 添加这部分 @ComponentScan({"cn.caohd.seata.async.*"}) public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } } ``` ####
资源推荐
资源详情
资源评论
收起资源包目录
通过组件的形式,允许seata的一些调用进行异步处理,可以实现异步+分布式事务的并存。-seata-async.zip (13个子文件)
seata-async-develop
pom.xml 2KB
src
test
java
cn
caohd
seata
async
context
SeataAsyncCallInfoTest.java 1KB
SeataAsyncCallContextTest.java 531B
util
SeataAsyncUtilTest.java 1KB
main
java
cn
caohd
seata
async
aspect
SeataAsyncAspect.java 2KB
context
SeataAysncCallContext.java 950B
SeataAsyncCallInfo.java 2KB
functional
AsyncNoRevFunction.java 214B
AsyncRevFunction.java 207B
util
SeataAsyncUtil.java 2KB
LICENSE 11KB
.gitignore 18B
README.md 3KB
共 13 条
- 1
资源评论
- m0_657798842024-04-01资源内容详细,总结地很全面,与描述的内容一致,对我启发很大,学习了。
武昌库里写JAVA
- 粉丝: 3136
- 资源: 1872
下载权益
C知道特权
VIP文章
课程特权
开通VIP
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 信息办公个人求职管理系统-jobgljsp.rar
- 信息办公一流网络JSP网络管理系统 v1.0-yljsp10.rar
- chirpstack学习
- 管家婆辉煌、财贸、工贸、服装,食品,千方模拟狗
- 基于python开发的工业环境老鼠检测+源码+文档(毕业设计&课程设计&项目开发)
- USB转以太网的芯片SR9900全套设计资料包括(参考设计原理图PCB+ Linux -Windows驱动程序+量产工具)
- 信息办公XML考试系统-xmlks.rar
- 基于python开发的无人机图像目标检测+实验数据+开发文档+操作流程+源码(毕业设计&课程设计&项目开发)
- 全球智能商品管理与优化系统
- IDM下载器(电脑小工具)
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功