SpringCloud整合分布式事务Seata 1.4.1 支持微服务全局异常拦截( 二 )

seata的mysql脚本
修改Seata 配置中心&注册中心修改Seata的配置
# 修改Seata配置cd /usr/local/software/seata/confvi registry.conf

SpringCloud整合分布式事务Seata 1.4.1 支持微服务全局异常拦截

文章插图
注:修改成自己的nacos信息
registry {# file 、nacos 、eureka、redis、zk、consul、etcd3、sofatype = "nacos"loadBalance = "RandomLoadBalance"loadBalanceVirtualNodes = 10nacos {application = "seata-server"serverAddr = "47.116.143.16:8848"group = "SEATA_GROUP"namespace = ""cluster = "default"username = "nacos"password = "nacos"}}config {# file、nacos 、apollo、zk、consul、etcd3type = "nacos"nacos {serverAddr = "47.116.143.16:8848"namespace = ""group = "SEATA_GROUP"username = "nacos"password = "nacos"}}因为Seata的配置中心是nacos,需要把Seata的配置 , 通过脚本推送到nacos中
官网地址:https://seata.io/zh-cn/docs/user/configuration/nacos.html
SpringCloud整合分布式事务Seata 1.4.1 支持微服务全局异常拦截

文章插图
脚本地址:https://github.com/seata/seata/blob/develop/script/config-center/nacos/nacos-config.sh
config.txt地址(可以暂时不修改配置参数,直接到nacos中修改配置):https://github.com/seata/seata/blob/develop/script/config-center/config.txt
SpringCloud整合分布式事务Seata 1.4.1 支持微服务全局异常拦截

文章插图
将Seata配置参数推送到nacos配置中心
# 1、将github中的nacos-config.sh,传到服务器上,目录为:/usr/local/software/seata/conf# 我这边使用的是,将脚本文件拷出,在服务创建文件夹,赋予权限touch nacos-config.shchmod +x nacos-config.sh# 2、将config.txt,放到服务器上 , 目录为:/usr/local/software/seata执行脚本
sh nacos-config.sh -h 47.116.143.16 -p 8848 -g SEATA_GROUP -u nacos -w nacos-h:nacos主机地址-p:nacos端口号-g:nacos分组-t:nacos命名空间-u:nacos账号-w:nacos密码
SpringCloud整合分布式事务Seata 1.4.1 支持微服务全局异常拦截

文章插图
推送成功,已将Seata配置参数推送到Nacos配置中心
SpringCloud整合分布式事务Seata 1.4.1 支持微服务全局异常拦截

文章插图
在nacos配置中心里,修改Seata参数,具体修改参考官网如下
SpringCloud整合分布式事务Seata 1.4.1 支持微服务全局异常拦截

文章插图

SpringCloud整合分布式事务Seata 1.4.1 支持微服务全局异常拦截

文章插图
具体config.txt里的参数解释:https://seata.io/zh-cn/docs/user/configurations.html
新建2个配置需要与微服务中的配置对应上
service.vgroupMapping.${spring.alibaba.seata.tx-service-group}=default如下service.vgroupMapping.order_service_group=defaultservice.vgroupMapping.product_service_group=default注意:分组为:SEATA_GROUP
SpringCloud整合分布式事务Seata 1.4.1 支持微服务全局异常拦截

文章插图
启动Seata服务
  • ./seata-server.sh启动,默认端口8091(守护进程方式启动 nohup ./seata-server.sh &)
注意:如果seata部署在服务器,微服务在本地启动的话,2个服务不在一个局域网下,因此没法通信,启动Seata时,需要指定ip和端口号
sh seata-server.sh -p 8091 -h 47.116.143.16Seata AT模式日期序列化问题解决方案后端服务引入kryo依赖<dependency><groupId>com.esotericsoftware</groupId><artifactId>kryo</artifactId><version>4.0.2</version></dependency><dependency><groupId>de.javakaffee</groupId><artifactId>kryo-serializers</artifactId><version>0.42</version></dependency>修改Seata在nacos配置中心配置将client.undo.logSerialization=jackson修改为client.undo.logSerialization=kryo
SpringCloud整合分布式事务Seata 1.4.1 支持微服务全局异常拦截

文章插图
微服务整合Seata前期准备在每个微服务所连的库 , 新建一张表
-- 注意此处0.3.0+ 增加唯一索引 ux_undo_logCREATE TABLE `undo_log` (`id` bigint(20) NOT NULL AUTO_INCREMENT,`branch_id` bigint(20) NOT NULL,`xid` varchar(100) NOT NULL,`context` varchar(128) NOT NULL,`rollback_info` longblob NOT NULL,`log_status` int(11) NOT NULL,`log_created` datetime NOT NULL,`log_modified` datetime 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;聚合工程搭建。。。。
项目结构

推荐阅读