当前位置: 首页 > news >正文

springboot整合seata

一、准备

docker部署seata-server 1.5.2参考:docker安装各个组件的命令

二、springboot集成seata

2.1 引入依赖

        <dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-seata</artifactId></dependency>

2.2 bootstrap.yml配置seata

seata:enabled: trueregistry:# 配置seata的注册中心, 告诉seata client 怎么去访问seata server(TC)type: nacosnacos:server-addr: 192.168.200.131:8848  # seata server 所在的nacos服务地址application: seata-server    # seata server 的服务名seata-server ,如果没有修改可以不配username: nacospassword: nacosgroup: SEATA_GROUP          # seata server 所在的组,默认就是SEATA_GROUP,没有改也可以不配config:type: nacosnacos:server-addr: 192.168.200.131:8848username: nacospassword: nacosgroup: SEATA_GROUPtx-service-group: default-tx-group  #这里每个服务都是对应不同的映射名,在配置中心可以看到service:vgroup-mapping:default-tx-group: default

2.3 在nacos的对应分组新增配置文件

这一步必须有,否则会报错找不到service.vgroupMapping.xxxxxxxx

can not get cluster name in registry config 'service.vgroupMapping.default_tx_group', please make sure registry config correct

在这里插入图片描述
在这里插入图片描述

2.4 切换druid数据源

spring:datasource:type: com.alibaba.druid.pool.DruidDataSourcedriver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://192.168.200.131:3306/sd?serverTimezone=GMT%2B8username: rootpassword: rootdruid:initialSize: 5minIdle: 5maxActive: 20maxWait: 600000

2.5 在业务库中创建undo_log表

CREATE TABLE `undo_log` (`branch_id` bigint(20) NOT NULL COMMENT 'branch transaction id',`xid` varchar(100) NOT NULL COMMENT 'global transaction id',`context` varchar(128) NOT NULL COMMENT 'undo_log context,such as serialization',`rollback_info` longblob NOT NULL COMMENT 'rollback info',`log_status` int(11) NOT NULL COMMENT '0:normal status,1:defense status',`log_created` datetime(6) NOT NULL COMMENT 'create datetime',`log_modified` datetime(6) NOT NULL COMMENT 'modify datetime',UNIQUE KEY `ux_undo_log` (`xid`,`branch_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='AT transaction mode undo table';

三、具体步骤

  1. 给order-service和product-service的父工程sd-service引入依赖spring-cloud-starter-alibaba-seata
  2. 给order-service和product-service的bootstrap.yml加入2.2和2.4的配置
  3. 在nacos中进行2.3的配置
  4. 在order-service中测试,代码如下(上面是order-service,下面是product-service,通过feign进行远程调用)
    在这里插入图片描述

error:

  • 在两个微服务中手动回滚GlobalTransactionContext.reload(RootContext.getXID()).rollback()会生效;
  • 使用@GlobalTransactional注解时,在order-service中抛出异常回滚会生效;但是在product-service中抛出异常时,事务已执行的操作都会提交,不会回滚,不知道为什么(找到问题了,feign客户端的fallback降级会用aop拦截异常,因此seata的aop识别不到下游服务异常,所以需要把所有fallback关掉测试

成功!!!


http://www.mrgr.cn/news/40212.html

相关文章:

  • lambda表达式底层实现
  • 基于深度学习的持续的知识积累与转移
  • JDK9与JDK8对比
  • 【计算机毕业设计】springboot就业信息管理系统
  • 计算机毕业设计 服装生产信息管理系统的设计与实现 Java实战项目 附源码+文档+视频讲解
  • 回归预测 | Matlab基于POA-SVR鹈鹕算法优化支持向量机的数据多输入单输出回归预测
  • [Uninstall] 软件彻底卸载工具的下载及详细安装使用过程(附有下载文件)
  • Unity实战案例全解析:RTS游戏的框选和阵型功能(5)阵型功能 优化
  • Unity实战案例全解析:RTS游戏的框选和阵型功能 总结
  • 【小程序】小tips:微信小程序登录后返回登录前的页面继续操作(保留参数)
  • 心理咨询预约管理系统(含源码+sql+视频导入教程)
  • C语言——动态内存分配
  • 数据预处理:数据挖掘的第一步
  • LORA模型与基座大模型合并并由transformer的AutoModel推理
  • Linux编译部署PHP环境
  • 浅谈W11Edge浏览器登录不上问题解决方案
  • 海信新风空调小氧吧X7:解锁母婴级标准认证的防直吹神器
  • JS网页设计案例
  • 各种莫队算法
  • 谷歌收录查询工具,如何选择适合自己的谷歌收录查询工具