Seata入门案例Seata1.4.1+Nacos+db_mysql8

前言

Java小白,如果存在错误欢迎大佬评论区及时指出,感激不尽。第一次使用seata,遇到很多问题,写这篇文章是加深一下自己的记忆,后续有新的理解会再补充


概念

概念这一块就不多介绍了,很多文章都有详细的介绍。

直接上代码

1. seata环境搭建

由于我是基于nacos做注册,基于db(mysql)做存储,所以提前在本地安装好了mysql8,并且已经单机启动了Nacos服务端。

首先下载seata.zip到本地,版本选择看个人。
本文章采用1.4.1版本
需要修改两个配置文件
值得注意的是因为我使用的是mysql8,而seata默认的驱动最高只支持mysql5,需要自己把mysql8的驱动jar包放到seata的lib文件夹中,可以看到里面全部都是seata依赖的jar包。
a. registry.conf
registry {
  # file 、nacos 、eureka、redis、zk、consul、etcd3、sofa
  type = "nacos"
  loadBalance = "RandomLoadBalance"
  loadBalanceVirtualNodes = 10

  nacos {
    application = "seata-server"
    serverAddr = "127.0.0.1:8848"
    group = "SEATA_GROUP"
    namespace = "2c7397fa-0b48-483b-b2ae-2caaef1f554b"
    cluster = "default"
    username = "nacos"
    password = "nacos"
  }
  eureka {
    serviceUrl = "http://localhost:8761/eureka"
    application = "default"
    weight = "1"
  }
  redis {
    serverAddr = "localhost:6379"
    db = 0
    password = ""
    cluster = "default"
    timeout = 0
  }
  zk {
    cluster = "default"
    serverAddr = "127.0.0.1:2181"
    sessionTimeout = 6000
    connectTimeout = 2000
    username = ""
    password = ""
  }
  consul {
    cluster = "default"
    serverAddr = "127.0.0.1:8500"
  }
  etcd3 {
    cluster = "default"
    serverAddr = "http://localhost:2379"
  }
  sofa {
    serverAddr = "127.0.0.1:9603"
    application = "default"
    region = "DEFAULT_ZONE"
    datacenter = "DefaultDataCenter"
    cluster = "default"
    group = "SEATA_GROUP"
    addressWaitTime = "3000"
  }
  file {
    name = "file.conf"
  }
}

config {
  # file、nacos 、apollo、zk、consul、etcd3
  type = "nacos"

  nacos {
    serverAddr = "127.0.0.1:8848"
    namespace = "2c7397fa-0b48-483b-b2ae-2caaef1f554b"
    group = "SEATA_GROUP"
    username = "nacos"
    password = "nacos"
  }
  consul {
    serverAddr = "127.0.0.1:8500"
  }
  apollo {
    appId = "seata-server"
    apolloMeta = "http://192.168.1.204:8801"
    namespace = "application"
    apolloAccesskeySecret = ""
  }
  zk {
    serverAddr = "127.0.0.1:2181"
    sessionTimeout = 6000
    connectTimeout = 2000
    username = ""
    password = ""
  }
  etcd3 {
    serverAddr = "http://localhost:2379"
  }
  file {
    name = "file.conf"
  }
}

b. file.conf
	## transaction log store, only used in seata-server
	store {
	  ## store mode: file、db、redis
	  mode = "db"
	
	  ## file store property
	  file {
	    ## store location dir
	    dir = "sessionStore"
	    # branch session size , if exceeded first try compress lockkey, still exceeded throws exceptions
	    maxBranchSessionSize = 16384
	    # globe session size , if exceeded throws exceptions
	    maxGlobalSessionSize = 512
	    # file buffer size , if exceeded allocate new buffer
	    fileWriteBufferCacheSize = 16384
	    # when recover batch read size
	    sessionReloadReadSize = 100
	    # async, sync
	    flushDiskMode = async
	  }
	
	  ## database store property
	  db {
	    ## the implement of javax.sql.DataSource, such as DruidDataSource(druid)/BasicDataSource(dbcp)/HikariDataSource(hikari) etc.
	    datasource = "druid"
	    ## mysql/oracle/postgresql/h2/oceanbase etc.
	    dbType = "mysql"
	    driverClassName = "com.mysql.cj.jdbc.Driver"
	    url = "jdbc:mysql://localhost:3306/seata"
	    user = "root"
	    password = "root"
	    minConn = 5
	    maxConn = 100
	    globalTable = "global_table"
	    branchTable = "branch_table"
	    lockTable = "lock_table"
	    queryLimit = 100
	    maxWait = 5000
	  }
	
	  ## redis store property
	  redis {
	    host = "127.0.0.1"
	    port = "6379"
	    password = ""
	    database = "0"
	    minConn = 1
	    maxConn = 10
	    maxTotal = 100
	    queryLimit = 100
	  }
	
	}
	
c. config.txt

官网有这个配置的示例,复制下来修改。

	transport.type=TCP
	transport.server=NIO
	transport.heartbeat=true
	transport.enableClientBatchSendRequest=false
	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
	service.vgroupMapping.my_test_tx_group=default
	service.default.grouplist=127.0.0.1:8091
	service.enableDegrade=false
	service.disableGlobalTransaction=false
	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=false
	client.rm.sqlParserType=druid
	client.rm.reportSuccessEnable=false
	client.rm.sagaBranchRegisterEnable=false
	client.tm.commitRetryCount=5
	client.tm.rollbackRetryCount=5
	client.tm.defaultGlobalTransactionTimeout=60000
	client.tm.degradeCheck=false
	client.tm.degradeCheckAllowTimes=10
	client.tm.degradeCheckPeriod=2000
	store.mode=file
	store.file.dir=file_store/data
	store.file.maxBranchSessionSize=16384
	store.file.maxGlobalSessionSize=512
	store.file.fileWriteBufferCacheSize=16384
	store.file.flushDiskMode=async
	store.file.sessionReloadReadSize=100
	store.db.datasource=druid
	store.db.dbType=mysql
	store.db.driverClassName=com.mysql.cj.jdbc.Driver
	store.db.url=jdbc:mysql://localhost:3306/seata?useUnicode=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
	store.redis.host=127.0.0.1
	store.redis.port=6379
	store.redis.maxConn=10
	store.redis.minConn=1
	store.redis.database=0
	store.redis.password=null
	store.redis.queryLimit=100
	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
	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
	log.exceptionRate=100
	transport.serialization=seata
	transport.compressor=none
	metrics.enabled=false
	metrics.registryType=compact
	metrics.exporterList=prometheus
	metrics.exporterPrometheusPort=9898
d. nacos-config.sh

用于初始化配置到Nacos的脚本,我也是从别处复制的。windows环境可以用gitBashHere执行以下命令。

nacos-config.sh -h localhost -p 8848 -g SEATA_GROUP -t 2c7397fa-0b48-483b-b2ae-2caaef1f554b -u nacos -w nacos
	while getopts ":h:p:g:t:u:w:" opt
	do
	  case $opt in
	  h)
	    host=$OPTARG
	    ;;
	  p)
	    port=$OPTARG
	    ;;
	  g)
	    group=$OPTARG
	    ;;
	  t)
	    tenant=$OPTARG
	    ;;
	  u)
	    username=$OPTARG
	    ;;
	  w)
	    password=$OPTARG
	    ;;
	  ?)
	    echo " USAGE OPTION: $0<
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值