springcloud接入seata管理分布式事务

下载安装包

链接: seata
在这里插入图片描述

配置seata-server

文件上传Linux解压

压缩包我放在/usr/local/seata中

tar -zxvf seata-server-2.0.0.tar.gz

修改配置文件

设置nacos为注册和配置中心

  1. 进入文件夹
cd /usr/local/seata/seata/conf
  1. 修改application.yml文件
......
......
console:
  user:
    username: seata
    password: seata
seata:
  config:
    # support: nacos, consul, apollo, zk, etcd3
    type: nacos
    nacos:
      server-addr: ip:8848
      group: 'DEFAULT_GROUP'
      namespace: '32e627d0-0b4xxxxxxx'
      dataId: "seataServer.properties"
      username: 'nacos'
      password: 'nacos'
  registry:
    # support: nacos, eureka, redis, zk, consul, etcd3, sofa
    type: nacos
    preferred-networks: xx.xx.*
    nacos:
      application: "seata-server"
      server-addr: ip:8848
      group: 'DEFAULT_GROUP'
      namespace: '32e627d0-0b4xxxxxxx'
      username: 'nacos'
      password: 'nacos'
......
......
  1. 将seata配置文件上传到nacos

在nacos新建配置文件seataServer.properties
在这里插入图片描述

官方供参考的配置文件: config.txt
以下为我修改后的配置文件

#For details about configuration items, see https://seata.io/zh-cn/docs/user/configurations.html
#Transport configuration, for client and server
transport.type=TCP
transport.server=NIO
transport.heartbeat=true
transport.enableTmClientBatchSendRequest=false
transport.enableRmClientBatchSendRequest=true
transport.enableTcServerBatchSendResponse=false
transport.rpcRmRequestTimeout=30000
transport.rpcTmRequestTimeout=30000
transport.rpcTcRequestTimeout=30000
transport.threadFactory.bossThreadPrefix=NettyBoss
transport.threadFactory.workerThreadPrefix=NettyServerNIOWorker
transport.threadFactory.serverExecutorThreadPrefix=NettyServerBizHandler
transport.threadFactory.shareBossWorker=false
transport.threadFactory.clientSelectorThreadPrefix=NettyClientSelector
transport.threadFactory.clientSelectorThreadSize=1
transport.threadFactory.clientWorkerThreadPrefix=NettyClientWorkerThread
transport.threadFactory.bossThreadSize=1
transport.threadFactory.workerThreadSize=default
transport.shutdown.wait=3
transport.serialization=seata
transport.compressor=none

#Transaction routing rules configuration, only for the client
service.vgroupMapping.default_tx_group=default
#If you use a registry, you can ignore it
service.default.grouplist=127.0.0.1:8091
service.enableDegrade=false
service.disableGlobalTransaction=false

#Transaction rule configuration, only for the client
client.rm.asyncCommitBufferLimit=10000
client.rm.lock.retryInterval=10
client.rm.lock.retryTimes=30
client.rm.lock.retryPolicyBranchRollbackOnConflict=true
client.rm.reportRetryCount=5
client.rm.tableMetaCheckEnable=true
client.rm.tableMetaCheckerInterval=60000
client.rm.sqlParserType=druid
client.rm.reportSuccessEnable=false
client.rm.sagaBranchRegisterEnable=false
client.rm.sagaJsonParser=fastjson
client.rm.tccActionInterceptorOrder=-2147482648
client.tm.commitRetryCount=5
client.tm.rollbackRetryCount=5
client.tm.defaultGlobalTransactionTimeout=60000
client.tm.degradeCheck=false
client.tm.degradeCheckAllowTimes=10
client.tm.degradeCheckPeriod=2000
client.tm.interceptorOrder=-2147482648
client.undo.dataValidation=true
client.undo.logSerialization=jackson
client.undo.onlyCareUpdateColumns=true
server.undo.logSaveDays=7
server.undo.logDeletePeriod=86400000
client.undo.logTable=undo_log
client.undo.compress.enable=true
client.undo.compress.type=zip
client.undo.compress.threshold=64k
#For TCC transaction mode
tcc.fence.logTableName=tcc_fence_log
tcc.fence.cleanPeriod=1h

#Log rule configuration, for client and server
log.exceptionRate=100

#Transaction storage configuration, only for the server. The file, db, and redis configuration values are optional.
store.mode=db
store.lock.mode=db
store.session.mode=db
#Used for password encryption
# store.publicKey=

#These configurations are required if the `store mode` is `db`. If `store.mode,store.lock.mode,store.session.mode` are not equal to `db`, you can remove the configuration block.
store.db.datasource=druid
store.db.dbType=mysql
store.db.driverClassName=com.mysql.cj.jdbc.Driver
store.db.url=jdbc:mysql://ip:3306/seata?useUnicode=true&rewriteBatchedStatements=true
store.db.user=root
store.db.password=root
store.db.minConn=5
store.db.maxConn=30
store.db.globalTable=global_table
store.db.branchTable=branch_table
store.db.distributedLockTable=distributed_lock
store.db.queryLimit=100
store.db.lockTable=lock_table
store.db.maxWait=5000

#Transaction rule configuration, only for the server
server.recovery.committingRetryPeriod=1000
server.recovery.asynCommittingRetryPeriod=1000
server.recovery.rollbackingRetryPeriod=1000
server.recovery.timeoutRetryPeriod=1000
server.maxCommitRetryTimeout=-1
server.maxRollbackRetryTimeout=-1
server.rollbackRetryTimeoutUnlockEnable=false
server.distributedLockExpireTime=10000
server.xaerNotaRetryTimeout=60000
server.session.branchAsyncQueueSize=5000
server.session.enableBranchAsyncRemove=false
server.enableParallelRequestHandle=false

#Metrics configuration, only for the server
metrics.enabled=false
metrics.registryType=compact
metrics.exporterList=prometheus
metrics.exporterPrometheusPort=9898

创建seata数据库及回滚表

  1. 在mysql新建了一个名为seata的数据库

  2. 导入seata回滚所需的表,链接: 表结构地址。根据自己的数据库选择。
    在这里插入图片描述

  3. 在需要接入seata的相关微服务数据库中,创建undo_log表。链接:表结构地址,根据自己的数据库选择。(接入服务的数据库不同,都要创建一次)

在这里插入图片描述

设置seata自启动

  1. 进入文件夹
/etc/systemd/system
  1. 创建seata.service文件
#固定写法,换一下路径即可
#!/bin/sh
[Unit]
Description=seata-service
After=syslog.target network.target remote-fs.target nss-lookup.target
[Service]
Type=forking
Environment="JAVA_HOME=/usr/local/java/jdk1.8.0_311"
ExecStart=/usr/local/seata/seata/bin/seata-server.sh -p 8091 -h ip
PrivateTmp=true
[Install]
WantedBy=multi-user.target

【注意】:此处-h 后接当前主机IP,如不接在nacos上注册的,会显示为172开头的虚拟IP

  1. 设置开机自启并刷新配置
systemctl enable seata
systemctl daemon-reload  # 刷新配置
  1. 启动seata
systemctl start seata
systemctl status seata # 查看服务状态
  1. 完成
    打开浏览器ip:7091,即可看到控制台。账号密码为前面修改配置文件设置的密码,即seata。
    在这里插入图片描述
    在这里插入图片描述

微服务接入seata

pom中引入seata依赖

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

yml配置文件设置

# seata配置
seata:
  enabled: true
  application-id: ${spring.application.name}
  tx-service-group: default_tx_group
  # 关闭自动代理
  enable-auto-data-source-proxy: false
  # seata nacos注册中心配置
  registry:
    type: nacos
    nacos:
      application: seata-server
      server-addr:  nacos的ip:8848
      group: DEFAULT_GROUP
      namespace: 32e627d0-0b49-48de-b298-fb959134e1c5
      username: 'nacos'
      password: 'nacos'
  # seata nacos配置中心配置
  config:
    type: nacos
    nacos:
      server-addr:  nacos的IP:8848
      group: DEFAULT_GROUP
      namespace: 32e627d0-0b49-48de-b298-fb959134e1c5
      data-id: seataServer.properties
      username: 'nacos'
      password: 'nacos'

【注意】:这里需要非常注意的是tx-service-group的值,要和seataServer.properties里面的相同。

#Transaction routing rules configuration, only for the client
service.vgroupMapping.default_tx_group=default

使用

主接口增加注解 @GlobalTransactional,远程调用服务增加注解 @Transactional。项目接入多数据源,新建两方法分别插入数据到不同库,看回滚效果。
在这里插入图片描述

TIPS:本项目使用的是mybatis-plus

  • 4
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值