spring-cloud-alibaba 微服务项目整合 seata1.4.2 分布式事务,AT模式

举例:下订单,减库存,增加用户积分 几个微服务


1 检查下springboot,spring cloud,spring cloud alibaba 的版本关系

<spring-boot.version>2.7.13</spring-boot.version>
<spring-cloud.version>2021.0.8</spring-cloud.version>
<spring-cloud-alibaba.version>2021.0.5.0</spring-cloud-alibaba.version>

2 添加依赖每个服务参与方都需要 

<!-- seata -->
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-seata</artifactId>
    <exclusions>
<!-- 要与seata服务端版本一直,所以把自带的替换掉 -->
<exclusion>
    <groupId>io.seata</groupId>
    <artifactId>seata-spring-boot-starter</artifactId>
</exclusion>
    </exclusions>
</dependency>
<dependency>
    <groupId>io.seata</groupId>
    <artifactId>seata-spring-boot-starter</artifactId>
    <version>1.4.2</version>
</dependency>

<!-- seata ,jackson序列化日期类型出错 -->
<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>

 3 修改配置文件,这里用AT模式,每个服务参与方都需要 ,特别注意事务组

seata:
  enabled: true
  application-id: ${spring.application.name}
  # 事务组的名称,对应service.vgroupMapping.default_tx_group=xxx中配置的default_tx_group
  tx-service-group: mytestshiwu
  # 配置事务组与集群的对应关系
  service:
    vgroup-mapping:
      # default_tx_group为事务组的名称,default为集群名称(与registry.conf中的一致)
      mytestshiwu: default
    disable-global-transaction: false
  # 注册中心 支持: nacos, eureka, redis, zk, consul, etcd3, sofa
  registry:
    type: nacos
    nacos:
      application: seata-server
      server-addr: 127.0.0.1:8848
      group: SEATA_GROUP
      namespace: f554db54-7c9d-4123-b6b8-7dde45a8f89b
      username: nacos
      password: nacos
      # registry.conf中,配置cluster名称
      cluster: default
  # 配置中心 支持: nacos, consul, apollo, zk, etcd3
  config:
    type: nacos
    nacos:
      server-addr: 127.0.0.1:8848
      group: SEATA_GROUP
      namespace: f554db54-7c9d-4123-b6b8-7dde45a8f89b
      username: nacos
      password: nacos
      # nacos配置中心配置的dataId
      data-id: seataServer.properties
  data-source-proxy-mode: AT

 4 每个微服务对应的数据库增加undo_log表(数据回滚使用)

SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;

-- ----------------------------
-- Table structure for undo_log
-- ----------------------------
DROP TABLE IF EXISTS `undo_log`;
CREATE TABLE `undo_log`  (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `branch_id` bigint(20) NOT NULL,
  `xid` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
  `context` varchar(128) CHARACTER SET utf8 COLLATE utf8_general_ci 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) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
  PRIMARY KEY (`id`) USING BTREE,
  UNIQUE INDEX `ux_undo_log`(`xid`, `branch_id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 24127 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;

SET FOREIGN_KEY_CHECKS = 1;

5 在事务发起方服务的方法上添加 @GlobalTransactional() 注解,这里用的用户服务,
   强烈建议不要用try catch,直接throws就完了

@GlobalTransactional(name = "Transactional_a",rollbackFor = Exception.class)
public Integer addOrder() throws Exception {
    业务代码
}

配置文件中 容易出错的地方,需要和seata安装配置文件,nacos配置中心的对应上,如图
1 事务组集群名称 和 nacos配置中心中的配置对应

# 事务组配置
service.vgroupMapping.mytestshiwu=default
service.default.grouplist=127.0.0.1:8091

# seata,jackson序列化日期
client.undo.logSerialization=kryo

2 seata安装文件中 registry.conf 的信息

# 注册中心
nacos {
    application = "seata-server"
    serverAddr = "127.0.0.1:8848"
    group = "SEATA_GROUP"
    namespace = "f554db54-7c9d-4123-b6b8-7dde45a8f89b"
    cluster = "default"
    username = "nacos"
    password = "nacos"
  }

# 配置中心
nacos {
    serverAddr = "127.0.0.1:8848"
    namespace = "f554db54-7c9d-4123-b6b8-7dde45a8f89b"
    group = "SEATA_GROUP"
    username = "nacos"
    password = "nacos"
    dataId = "seataServer.properties"
  }

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值