首页 > 其他分享 >AT模式【分布式事务】

AT模式【分布式事务】

时间:2023-06-27 16:33:44浏览次数:47  
标签:事务 seata db nacos 模式 server tc store 分布式

1、导入 maven 依赖

<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-seata</artifactId>
    <exclusions>
        <!--版本较低,1.3.0,因此排除-->
        <exclusion>
            <artifactId>seata-spring-boot-starter</artifactId>
            <groupId>io.seata</groupId>
        </exclusion>
    </exclusions>
</dependency>
<!--seata starter 采用1.4.2版本-->
<dependency>
    <groupId>io.seata</groupId>
    <artifactId>seata-spring-boot-starter</artifactId>
    <version>${seata.version}</version>
</dependency>

 

2、添加 yml 文件配置

seata:
  registry: # TC服务注册中心的配置,微服务根据这些信息去注册中心获取tc服务地址
    # 参考tc服务自己的registry.conf中的配置
    type: nacos
    nacos: # tc
      server-addr: 127.0.0.1:8848
      namespace: ""
      group: DEFAULT_GROUP
      application: seata-tc-server # tc服务在nacos中的服务名称
      cluster: SH
  tx-service-group: seata-demo # 事务组,根据这个获取tc服务的cluster名称
  service:
    vgroup-mapping: # 事务组与TC服务cluster的映射关系
      seata-demo: SH
  data-source-proxy-mode: AT # 默认就是AT

 

3、在方法上添加注解

@GlobalTransactional

 

 

备注

0.1 在 nacos 添加配置

服务端配置名:seataServer.properties

配置格式:Properties

# 数据存储方式,db代表数据库
store.mode=db
store.db.datasource=druid
store.db.dbType=mysql
store.db.driverClassName=com.mysql.jdbc.Driver
store.db.url=jdbc:mysql://127.0.0.1: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.queryLimit=100
store.db.lockTable=lock_table
store.db.maxWait=5000
# 事务、日志等配置
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.undo.logSaveDays=7
server.undo.logDeletePeriod=86400000

# 客户端与服务端传输方式
transport.serialization=seata
transport.compressor=none
# 关闭metrics功能,提高性能
metrics.enabled=false
metrics.registryType=compact
metrics.exporterList=prometheus
metrics.exporterPrometheusPort=9898

==  其中的数据库地址、用户名、密码都需要修改成你自己的数据库信息。==

 

0.2 修改conf目录下的registry.conf文件

registry {
  # tc服务的注册中心类,这里选择nacos,也可以是eureka、zookeeper等
  type = "nacos"

  nacos {
    # seata tc 服务注册到 nacos的服务名称,可以自定义
    application = "seata-tc-server"
    serverAddr = "127.0.0.1:8848"
    group = "DEFAULT_GROUP"
    namespace = ""
    cluster = "SH"
    username = "nacos"
    password = "nacos"
  }
}

config {
  # 读取tc服务端的配置文件的方式,这里是从nacos配置中心读取,这样如果tc是集群,可以共享配置
  type = "nacos"
  # 配置nacos地址等信息
  nacos {
    serverAddr = "127.0.0.1:8848"
    namespace = ""
    group = "SEATA_GROUP"
    username = "nacos"
    password = "nacos"
    dataId = "seataServer.properties"
  }
}

 

标签:事务,seata,db,nacos,模式,server,tc,store,分布式
From: https://www.cnblogs.com/Rover20230226/p/17509223.html

相关文章

  • 创建型模式-单例模式(使用元类实现)
    #创建型模式-单例模式(使用元类实现)#线程锁:防止创建多个实例#双重检查:实例创建后,防止重复加锁占用资源#__call__作用:__call__方法使一个类的实例像方法一样调用,当我们调用一个实例时,实际就是调用了它的__call__方法importtimefromthreadingimportLockfromconcurrent.futu......
  • 创建型模式-单例模式(使用类实现)
    importtimefromthreadingimportLockfromconcurrent.futuresimportThreadPoolExecutorclassTest():passclassSingleton():_local=Lock()_insrance=None@classmethoddefinstance(cls,*args,**kwargs):ifnotcls._i......
  • redis-分布式锁优化思路
    1.加锁的代码块,粒度越小越好,语句越少越好,更不容易出现"插队"的现象2.分段锁思路:以"超卖"为例,原本是待促销200件商品,一把锁,现改成10款20件商品的促销,改成10把锁,当并发小于10的时候,甚至都不需要锁,就可以并发安全......
  • redis-分布式锁样例
    redisTemplate:stringlockKey="product_101"stringclientID=UUID.randomUUID().toString()boolresult=redisTemplate.opsForValue().setIfAbsent(lockKey,clientID,10,TimeUnit.SECONDS)if(!result){return"error_code"}try{//业务逻辑......
  • 分布式锁的实现方式介绍和代码示例
    分布式锁的实现方式介绍分布式锁是一种用于分布式系统中实现互斥访问的机制。在分布式系统中,多个进程或线程可能同时访问共享资源,为了保证数据的一致性和正确性,需要使用分布式锁来实现资源的互斥访问。分布式锁的基本原理是通过在分布式环境下协调各个节点之间......
  • redis-分布式锁注意事项
    lockKey:商品标识value:当前线程标识1.确保每把锁同一时间能且仅能上一次setnx(setifnotexists):当锁不存在时才上锁redisTemplate.opsForValue().setIfAbsent(lockKey,value)没加上锁需要返回错误码直接让其重试2.上锁成功后,需要在之后将锁释放redisTemplate.delete(l......
  • 什么是事务?
    事务是指一系列数据库操作被视为一个逻辑单元,这个单元要么完全执行,要么完全不执行。在数据库中,事务通常用于保证数据的一致性和完整性。事务具有以下特性:1.原子性(Atomicity):一个事务中的所有操作要么全部成功,要么全部失败,不会出现部分成功的情况。2.一致性(Consistency):事务执行......
  • 创建型模式-单例模式(使用模块实现)
    singletion模块classTest():passa=Test() 调用模块fromsingleton.testimportaif__name__=="__main__":foriteminrange(10):b=aprint(id(b))......
  • 分布式任务elasticjob整合springboot本地多服务启动(附源码)
    Elastic-Job是一个分布式调度的解决方案,由当当网开源,它由两个相互独立的子项目Elastic-Job-Lite和ElasticJob-Cloud组成,使用Elastic-Job可以快速实现分布式任务调度。Elastic-Job的github地址:https://github.com/elasticjob功能列表:分布式调度协调在分布式环境中,任务能够按指......
  • 行为模式
    责任链模式责任链模式是一种行为设计模式,允许你将请求沿着处理者链进行发送。收到请求后,每个处理者均可对请求进行处理,或将其传递给链上的下个处理者。比如kratos,gin等开源库的中间件实现。代码实现packagemainimport( "context" "fmt")typeHandlerfunc(ctxc......