seata使用总结
2022-01-28 13:26:46 0 举报
seata使用总结
作者其他创作
大纲/内容
seata库三张表建表语句
branch_table
CREATE TABLE `branch_table` (<br> `branch_id` bigint NOT NULL,<br> `xid` varchar(128) NOT NULL,<br> `transaction_id` bigint DEFAULT NULL,<br> `resource_group_id` varchar(32) DEFAULT NULL,<br> `resource_id` varchar(256) DEFAULT NULL,<br> `branch_type` varchar(8) DEFAULT NULL,<br> `status` tinyint DEFAULT NULL,<br> `client_id` varchar(64) DEFAULT NULL,<br> `application_data` varchar(2000) DEFAULT NULL,<br> `gmt_create` datetime(6) DEFAULT NULL,<br> `gmt_modified` datetime(6) DEFAULT NULL,<br> PRIMARY KEY (`branch_id`),<br> KEY `idx_xid` (`xid`)<br>) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3;
global_table<br>
CREATE TABLE `global_table` (<br> `xid` varchar(128) NOT NULL,<br> `transaction_id` bigint DEFAULT NULL,<br> `status` tinyint NOT NULL,<br> `application_id` varchar(32) DEFAULT NULL,<br> `transaction_service_group` varchar(32) DEFAULT NULL,<br> `transaction_name` varchar(128) DEFAULT NULL,<br> `timeout` int DEFAULT NULL,<br> `begin_time` bigint DEFAULT NULL,<br> `application_data` varchar(2000) DEFAULT NULL,<br> `gmt_create` datetime DEFAULT NULL,<br> `gmt_modified` datetime DEFAULT NULL,<br> PRIMARY KEY (`xid`),<br> KEY `idx_gmt_modified_status` (`gmt_modified`,`status`),<br> KEY `idx_transaction_id` (`transaction_id`)<br>) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3;
lock_table<br>
<div>CREATE TABLE `lock_table` (</div><div> `row_key` varchar(128) NOT NULL,</div><div> `xid` varchar(96) DEFAULT NULL,</div><div> `transaction_id` bigint DEFAULT NULL,</div><div> `branch_id` bigint NOT NULL,</div><div> `resource_id` varchar(256) DEFAULT NULL,</div><div> `table_name` varchar(32) DEFAULT NULL,</div><div> `pk` varchar(36) DEFAULT NULL,</div><div> `gmt_create` datetime DEFAULT NULL,</div><div> `gmt_modified` datetime DEFAULT NULL,</div><div> PRIMARY KEY (`row_key`),</div><div> KEY `idx_branch_id` (`branch_id`)</div><div>) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3;</div>
undo_log建表语句
CREATE TABLE `undo_log` (<br> `id` bigint NOT NULL AUTO_INCREMENT COMMENT 'increment id',<br> `branch_id` bigint NOT NULL COMMENT 'branch transaction id',<br> `xid` varchar(100) NOT NULL COMMENT 'global transaction id',<br> `context` varchar(128) NOT NULL COMMENT 'undo_log context,such as serialization',<br> `rollback_info` longblob NOT NULL COMMENT 'rollback info',<br> `log_status` int NOT NULL COMMENT '0:normal status,1:defense status',<br> `log_created` datetime NOT NULL COMMENT 'create datetime',<br> `log_modified` datetime NOT NULL COMMENT 'modify datetime',<br> `ext` varchar(100) DEFAULT NULL COMMENT 'reserved field',<br> PRIMARY KEY (`id`),<br> UNIQUE KEY `ux_undo_log` (`xid`,`branch_id`)<br>) ENGINE=InnoDB AUTO_INCREMENT=15 DEFAULT CHARSET=utf8mb3 COMMENT='AT transaction mode undo table';
seata maven 依赖问题<br>
<dependency><br> <groupId>io.seata</groupId><br> <artifactId>seata-spring-boot-starter</artifactId><br> <version>1.4.0</version><br> <exclusions><br> <exclusion><br> <groupId>io.seata</groupId><br> <artifactId>seata-all</artifactId><br> </exclusion><br> </exclusions><br></dependency><br><dependency><br> <groupId>io.seata</groupId><br> <artifactId>seata-all</artifactId><br> <version>1.4.0</version><br> <exclusions><br> <exclusion><br> <groupId>com.alibaba</groupId><br> <artifactId>druid</artifactId><br> </exclusion><br> </exclusions><br></dependency><br>
seata官网 : seata.io
seata基础配置问题
数据库配置
首先配置seata数据库,创建表branch_table,global_table,lock_table,库名默认为seata
所有的业务表中也就是要用到分布式事务表中加入undo_log 表<br>
file.config
修改 模式为db 并且修改db的相关属性,属性对应上方新建的seata库的信息
registry.conf 文件配置 <br>
选择注册中心为nacos
选择配置中心为nacos
具体信息可参考文档
https://blog.csdn.net/jixieguang/article/details/110621561
https://blog.csdn.net/qq_41133155/article/details/109737266
springcloud整合Seata,nacaos 注意点
同步nacos配置数据
导入nacos的相关配置:<br>service.vgroup_mapping.seata_tx_group=default <br>注意seata1.4 已经使用驼峰命名所以要改成<br>service.vgroupMapping.seata_tx_group=default<br>同时注意seata_tx_group 要与springboot中的相关信息一致 也可以在springboot配置文件中配置<br>store.mode=db<br>store.db.dbType=mysql<br>store.db.datasource=druid<br>store.db.driver-class-name=com.mysql.cj.jdbc.Driver mysql 8.0以上<br>store.db.url=jdbc:mysql://127.0.0.1:3306/seata?useUnicode=true<br>store.db.user=root<br>store.db.password=root<br>service.default.grouplist=127.0.0.1:8091 此处就是你的seata服务 也可以在springboot配置文件中配置<br>
springboot 也就是application.yml相关配置
seata:<br> enabled: true<br> enableAutoDataSourceProxy: true<br> tx-service-group: seata_tx_group<br> registry:<br> type: nacos<br> nacos:<br> application: seata-server<br> group : SEATA_GROUP<br> server-addr: localhost:8848<br> username: nacos<br> password: nacos<br> namespace: 66cac8e5-f076-4ed1-a3d9-93a68d17c342<br> config:<br> type: nacos<br> nacos:<br> application: seata-server<br> server-addr: localhost:8848<br> group: SEATA_GROUP<br> username: nacos<br> password: nacos<br> namespace: 66cac8e5-f076-4ed1-a3d9-93a68d17c342<br> # 如果nacos为配置中心,则service配置相关信息 必须放在nacos中<br> #service:<br> # grouplist:<br> # default: localhost:8081<br> #注意驼峰<br> # vgroupMapping:<br> # seata_tx_group: default<br> # disable-global-transaction: false<br> client:<br> rm:<br> report-success-enable: false<br>#--------------------------------------------------------------<br>#注意: tx-service-group: seata_tx_group 必须与service.vgroupMapping.seata_tx_group=default 一致<br>
全局事务id即XID信息传递问题
在springcloud中用feign调用服务必须在头部传递XID信息,否则没有XID的传递 分布式事务也不会生效
/**<br> * Feign 配置类<br> *<br> * @author yaoj<br> * @since 2022/1/5<br> */<br>@Configuration<br>public class FeignConfig {<br><br><br> @Bean<br> public RequestInterceptor headerRequestInterceptor() {<br> return template -> {<br> template.header(RootContext.KEY_XID, RootContext.getXID());<br> };<br> }<br><br>}
0 条评论
下一页