赞
踩
Seata 是一款开源的分布式事务解决方案,致力于在微服务架构下提供高性能和简单易用的分布式事务服务,下面我们以最快的速度搭建springboot + dubbo + seata 的demo
1.首先下载seatea最新的安装包,路径如下
https://github.com/seata/seata/releases/
2.解压并配置Seata
首先进入conf/文件夹
打开registry.conf文件,
可以看到默认配置的是读取file和注册到file,我们将其都改为nacos,下面展示主要配置位置,大家按照自己的nacos进行具体配置
- registry {
- # file 、nacos 、eureka、redis、zk、consul、etcd3、sofa
- type = "file"
-
- nacos {
- application = "seata-server"
- serverAddr = "127.0.0.1:8848"
- group = "SEATA_GROUP"
- namespace = "74fe7825-bbb9-4723-b73e-e9182c903cec"
- cluster = "default"
- username = "nacos"
- password = "nacos"
- }
-
- .
- .//省略其他配置
- .
- }
-
- config {
- # file、nacos 、apollo、zk、consul、etcd3
- type = "nacos"
-
- nacos {
- serverAddr = "127.0.0.1:8848"
- namespace = "74fe7825-bbb9-4723-b73e-e9182c903cec"
- group = "SEATA_GROUP"
- username = "nacos"
- password = "nacos"
- dataId = "seataServer.properties"
- }
- .
- .//省略其他配置
- .
- }
3.加载默认配置参数到nacos
1)下载配置文件
地址:https://github.com/seata/seata/blob/develop/script/config-center/config.txt
下载后,放于seata-server-x.x.x\下,
打开文件将没有配置的项删除或赋值,否则会执行失败,下面是我自己执行成功的一份文件
- transport.type=TCP
- transport.server=NIO
- transport.heartbeat=true
- transport.enableClientBatchSendRequest=true
- 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.tableMetaCheckerInterval=60000
- client.rm.sqlParserType=druid
- client.rm.reportSuccessEnable=false
- client.rm.sagaBranchRegisterEnable=false
- 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
- store.mode=file
- store.lock.mode=file
- store.session.mode=file
- store.publicKey=seata12345
- 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.jdbc.Driver
- store.db.url=jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&rewriteBatchedStatements=true
- store.db.user=root
- store.db.password=123456
- 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.mode=single
- store.redis.single.host=127.0.0.1
- store.redis.single.port=6379
- store.redis.maxConn=10
- store.redis.minConn=1
- store.redis.maxTotal=100
- store.redis.database=0
- store.redis.password=123456
- 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
- server.distributedLockExpireTime=10000
- 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
- log.exceptionRate=100
- transport.serialization=seata
- transport.compressor=none
- metrics.enabled=false
- metrics.registryType=compact
- metrics.exporterList=prometheus
- metrics.exporterPrometheusPort=9898
正确配置其中service.default.grouplist=127.0.0.1:8091配置的是seata-server的地址
2下载执行脚本
地址:https://github.com/seata/seata/blob/develop/script/config-center/nacos/nacos-config.sh
放于放于seata-server-x.x.x\bin下
修改其中的nacos配置为实际值
- #!/usr/bin/env bash
- # Copyright 1999-2019 Seata.io Group.
- #
- # Licensed under the Apache License, Version 2.0 (the "License");
- # you may not use this file except in compliance with the License.
- # You may obtain a copy of the License at、
- #
- # http://www.apache.org/licenses/LICENSE-2.0
- #
- # Unless required by applicable law or agreed to in writing, software
- # distributed under the License is distributed on an "AS IS" BASIS,
- # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- # See the License for the specific language governing permissions and
- # limitations under the License.
-
- 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 [-h host] [-p port] [-g group] [-t tenant] [-u username] [-w password] "
- exit 1
- ;;
- esac
- done
-
- urlencode() {
- for ((i=0; i < ${#1}; i++))
- do
- char="${1:$i:1}"
- case $char in
- [a-zA-Z0-9.~_-]) printf $char ;;
- *) printf '%%%02X' "'$char" ;;
- esac
- done
- }
-
- if [[ -z ${host} ]]; then
- host="127.0.0.1"
- fi
- if [[ -z ${port} ]]; then
- port=8848
- fi
- if [[ -z ${group} ]]; then
- group="SEATA_GROUP"
- fi
- if [[ -z ${tenant} ]]; then
- tenant="74fe7825-bbb9-4723-b73e-e9182c903cec"
- fi
- if [[ -z ${username} ]]; then
- username="nacos"
- fi
- if [[ -z ${password} ]]; then
- password="nacos"
- fi
-
- nacosAddr=$host:$port
- contentType="content-type:application/json;charset=UTF-8"
-
- echo "set nacosAddr=$nacosAddr"
- echo "set group=$group"
-
- failCount=0
- tempLog=$(mktemp -u)
- function addConfig() {
- curl -X POST -H "${contentType}" "http://$nacosAddr/nacos/v1/cs/configs?dataId=$(urlencode $1)&group=$group&content=$(urlencode $2)&tenant=$tenant&username=$username&password=$password" >"${tempLog}" 2>/dev/null
- if [[ -z $(cat "${tempLog}") ]]; then
- echo " Please check the cluster status. "
- exit 1
- fi
- if [[ $(cat "${tempLog}") =~ "true" ]]; then
- echo "Set $1=$2 successfully "
- else
- echo "Set $1=$2 failure "
- (( failCount++ ))
- fi
- }
-
- count=0
- for line in $(cat $(dirname "$PWD")/config.txt | sed s/[[:space:]]//g); do
- (( count++ ))
- key=${line%%=*}
- value=${line#*=}
- addConfig "${key}" "${value}"
- done
-
- echo "========================================================================="
- echo " Complete initialization parameters, total-count:$count , failure-count:$failCount "
- echo "========================================================================="
-
- if [[ ${failCount} -eq 0 ]]; then
- echo " Init nacos config finished, please start seata-server. "
- else
- echo " init nacos config fail. "
- fi
修改后,直接执行,如果是在windows环境下,可以通过Git Bash运行,运行成功如下
4.启动seata-server
直接运行 seata-server-x.x.x\bin\seata-server.bat或seata-server-x.x.x\bin\seata-server.sh即可
5.下载seated的demo案例
下载地址:https://github.com/seata/seata-samples
6.配置springboot-dubbo-seata
分别配置samples-account samples-business samples-order samples-storage下的
application.properties和registry.conf
application.properties主要修改nacos配置
registry.conf可以从seata-server的conf下复制过来
7.下面按照官方的说明文档去运行demo就可以了
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。