今天同事咨询我什么事分布式事务?怎么用分布式事务?有没有什么好的中间件来解决分布式事务?
所谓分布式事务,事务的参与者、支持事务的服务器、资源服务器以及事务管理器分别位于不同的分布式系统的不同节点之上。
这就是问题所在不同的服务之间怎么去控制事务呢?今天我们所要了解的seata便能很好的解决这一难题!接下来我们进入今天的学习干活。
1、下载地址:seata.io/zh-cn/blog/…
(我这里选择的是1.0以下版本。0.9.0版本的,1.0以上的配置和这里不一样。后面会发文章单独讲解1.0以上版本的配置)
2、下载后在E:\tools\seata\seata-server-0.9.0\conf
文件内备份file.conf及registry.conf两个文件,以防改错文件,用以快速恢复。这里主要修改file.conf文件中的事务组名称、事务日志存储模式为db、数据库链接信息这三个
3、创建seata库,然后在目录中将建表文件执行(E:\tools\seata\seata-server-0.9.0\conf\db_store.sql)
表global_table,将表中transaction_service_group字段原有32的长度更改作为256长度
这样可避免一下字段长度超长问题
4、修改registry.conf文件,调整注册中心为nacos,指向我们的nacos注册中心
5、启动nacos(这个必须先与seata-server先启动,不然找不到可用服务)
6、启动seata-server服务,查看nacos控制台出现如下图所示,则说明seata-server启动成功
命令:./seata-server.sh -h ip地址 -p 8091 &
7、在各自业务库中新建日志回滚表(E:\tools\seata\seata-server-0.9.0\conf\db_undo_log.sql)
如果没有此文件,可按下方sql创建
drop table undo_log; CREATE TABLE undo_log( idbigint(20) NOT NULL AUTO_INCREMENT, branch_idbigint(20) NOT NULL, xidvarchar(100) NOT NULL, contextvarchar(128) NOT NULL, rollback_infolongblob NOT NULL, log_statusint(11) NOT NULL, log_createddatetime NOT NULL, log_modifieddatetime NOT NULL, ext varchar(100) DEFAULT NULL, PRIMARY KEY (id), UNIQUE KEY ux_undo_log (xid,branch_id) ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
服务端的搭建到此就完成了,记下来我们会更新业务端代码!