SpringCloud 集成 seata+nacos记录一下

seata 版本是docker仓库的latest,nacos也是

首先先配置nacos

这个就不记录了,可以去其他教程看

配置seata

  1. 首先得在docker仓库中拉取最新的seata 版本
  2. seata最新版本以上就不需要配置file.txt 和 registry 文件了,直接启动一个临时的容器,把application.yml文件挂载到宿主机上。得修改里面的内容。
// An highlighted block
server:
 port: 7091

spring:
 application:
   name: seata-server

logging:
 config: classpath:logback-spring.xml
 file:
   path: ${user.home}/logs/seata
 extend:
   logstash-appender:
     destination: 127.0.0.1:4560
   kafka-appender:
     bootstrap-servers: 127.0.0.1:9092
     topic: logback_to_logstash

console:
 user:
   username: seata
   password: seata

seata:
 config:
   # support: nacos, consul, apollo, zk, etcd3
   type: nacos
   nacos:
     server-addr: ip:8848
     # 保证nacos上有这个命名空间
     namespace: -b021-2d14ae41e5c5
     group: SEATA_GROUP
     username: “”
     password: “”
 registry:
   # support: nacos, eureka, redis, zk, consul, etcd3, sofa
   type: nacos
   nacos:
     application: seata-server
     server-addr: ip:8848
     namespace: -b021-2d14ae41e5c5
     group: SEATA_GROUP
     username: “”
     password: “”
 store:
   # support: file 、 db 、 redis
   mode: db
   db:
     datasource: druid
     db-type: mysql
     driver-class-name: com.mysql.jdbc.Driver
     url: jdbc:mysql://ip:3306/seata?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&useSSL=false&serverTimezone=GMT%2B8
     username: root
     password: 1q2w3e4r
     maxActive: 10
     maxWait: 3000
#  server:
#    service-port: 8091 #If not configured, the default is '${server.port} + 1000'
 security:
   secretKey: SeataSecretKey0c382ef121d778043159209298fd40bf3850a017
   tokenValidityInMilliseconds: 1800000
   ignore:
     urls: /,/**/*.css,/**/*.js,/**/*.html,/**/*.map,/**/*.svg,/**/*.png,/**/*.ico,/console-fe/public/**,/api/v1/auth/login
  1. nacos启动成功之后需要把config.txt 的内容加再到nacos命名空间中,和上面配置文件的命名空间一致,命令如下:

sh nacos-config.sh -h[nacos地址] -p 8848 -g SEATA_GROUP -t 05cfaa5e-c1bb-491c-b021-2d14ae41e5c5

  1. config文件如下:
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=ip: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=db
store.lock.mode=file
store.session.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.jdbc.Driver
store.db.url=jdbc:mysql://ip:3306/seata?    useUnicode=true&rewriteBatchedStatements=true    // 修改
store.db.user=root
store.db.password=“”
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=192.168.1.11
store.redis.single.port=6379
store.redis.maxConn=10
store.redis.minConn=1
store.redis.maxTotal=100
store.redis.database=0
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
  1. nacos-config.sh 如下,可不做修改:
#!/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=localhost
fi
if [[ -z ${port} ]]; then
   port=8848
fi
if [[ -z ${group} ]]; then
   group="SEATA_GROUP"
fi
if [[ -z ${tenant} ]]; then
   tenant=""
fi
if [[ -z ${username} ]]; then
   username=""
fi
if [[ -z ${password} ]]; then
   password=""
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
  1. config.txt文件需要放在 nacos-config.sh 的上一级目录,再执行第三步的命令
  2. docker-compose.yml配置如下:
version: '3'   # 指定 compose 文件的版本,必写
services:      # 定义所有的 service 信息, 必写
   seata-server:
       restart: always
       image: seataio/seata-server:latest
       container_name: seata
       networks:
         - yongwei_network
       environment:
        - SEATA_IP= 得是服务器ip
        - SEATA_PORT=8091
        - STORE_MODE=db
       volumes:
         - /seata/libs/mysql-connector-java-5.1.35.jar:/seata-server/lib/mysql-connector-java-5.1.35.jar
         - /seata/conf/application.yml:/seata-server/resources/application.yml
         - /log/seata:/root/logs
       ports:
         - "8091:8091"
       container_name: "seata-server"
networks:
 network:
   driver: bridge
  1. 然后在启动服务,就可以发现seata-server 服务注册到nacos中了,说明集成成功
  2. 最后我把项目的配置文件发出来:
spring:
	cloud:
       nacos:
         discovery:
           server-addr: ip:8848
           group: SEATA_GROUP
           namespace: 05cfaa5e-c1bb-491c-b021-2d14ae41e5c5
         config:
           server-addr: ip:8848
           file-extension: yaml
           username: “”
     		password: “”
           group: SEATA_GROUP
           namespace: 05cfaa5e-c1bb-491c-b021-2d14ae41e5c5
seata:
 # 开启自动装配
 #  enabled: true
 # 本客户端的微服务名称
 application-id: ${spring.application.name}
 # 读取哪个事务分组
 tx-service-group: my_test_tx_group
 # 配置中心设置
 config:
   type: nacos
   nacos:
     username: “”
     password: “”
     # 读取的配置分组
     group: SEATA_GROUP
     server-addr: ip:8848
     namespace: 05cfaa5e-c1bb-491c-b021-2d14ae41e5c5
 # 注册中心设置
 registry:
   type: nacos
   nacos:
     # SEATA服务中心的微服务名,此处与服务端保持一致
     application: seata-server
     server-addr: ip:8848
     username: “”
     password: “”
     group: SEATA_GROUP
     namespace: 05cfaa5e-c1bb-491c-b021-2d14ae41e5c5
   # 例如此时会读取 SEATA_GROUP 这个分组下的 service.vgroupMapping.my_test_tx_group 这个属性的值。从上面的配置可以知道笔者此处的最终值为 testCluster。后面程序运行会找到 testCluster 这个集群的seata服务端,进行通讯。
   service:
     vgroupMapping:
       my_test_tx_group: default # 需要与config.txt中的 service.vgroupMapping.seata_test_group=default 保持一致
   #      disable-global-transaction: false

完毕收工!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值