Seata 是一款开源的分布式事务解决方案,致力于在微服务架构下提供高性能和简单易用的分布式事务服务。在 Seata 开源之前,Seata 对应的内部版本在阿里经济体内部一直扮演着分布式一致性中间件的角色,帮助经济体平稳的度过历年的双11,对各BU业务进行了有力的支撑。经过多年沉淀与积累,商业化产品先后在阿里云、金融云进行售卖。2019.1 为了打造更加完善的技术生态和普惠技术成果,Seata 正式宣布对外开源,未来 Seata 将以社区共建的形式帮助其技术更加可靠与完备。
Spring Cloud中使用Seata使用 Feign 实现远程调用。
Windows上安装Seata服务http://www.javacui.com/tool/622.html
XA模式,官方说明
http://seata.io/zh-cn/docs/dev/mode/xa-mode.html
官方参考
https://github.com/seata/seata-samples/tree/master/seata-xa
POM引入
<dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-seata</artifactId> <exclusions> <!--版本较低,1.3.0,因此排除--> <exclusion> <artifactId>seata-spring-boot-starter</artifactId> <groupId>io.seata</groupId> </exclusion> </exclusions> </dependency> <!--seata starter 采用1.4.2版本--> <dependency> <groupId>io.seata</groupId> <artifactId>seata-spring-boot-starter</artifactId> <version>1.4.2</version> </dependency>
需要修改application.yml文件,添加一些配置:
seata: data-source-proxy-mode: XA registry: # TC服务注册中心的配置,微服务根据这些信息去注册中心获取tc服务地址 # 参考tc服务自己的registry.conf中的配置 type: nacos nacos: # tc server-addr: 192.168.2.22:8848 username: nacos password: nacos namespace: "" # 命名空间,默认public group: DEFAULT_GROUP # 分组,默认DEFAULT_GROUP application: seata-server # tc服务在nacos中的服务名称 tx-service-group: seata-demo # 事务组,根据这个获取tc服务的cluster名称 service: vgroup-mapping: # 事务组与TC服务cluster的映射关系 seata-demo: DEFAULT
买个需要用到分布式事务的模块都要加入该配置
用@GlobalTransactional注解,替换原来Spring的@Transactional事务注解。
注意,只需要在入口模块的方法上,即发起全局事务的入口方法上改即可。
测试地址
http://localhost:8082/order?userId=user202103032042012&commodityCode=100202003032041&count=20&money=200
如果你无法打开github,或者对上面的配置有疑问,可以下载如下源码参考
一个是官方参考,一个是本示例使用的代码,里面有建库的SQL语句。