SpringCloudAlibaba + Seata1.2.0 +Nacos 集成
本文主要记录如何安装Seata 以及集成到项目中,其他请自行百度
环境:
阿里云服务器 8核 16G 服务器2台 centos 6.9
1.台安装nacos,seata
2.测试项目工程
1.Nacos 安装
详情请见 :https://nacos.io/zh-cn/docs/what-is-nacos.html
2.Seata 安装
传送门:https://github.com/seata/seata/releases
我使用的是1.2.0
请下载2个文件:
seata-server-1.2.0.zip
Source Code(zip) 由于GIT下载几次失败,所以我Source Code 下载的1.4版本的。反正运行成功了....
下载完毕后解压
说明:
1.seata目录
seata目录里面是刚才解压seata-server-1.2.0.zip 后的目录 其中主要 2个目录最重要
conf 文件里面包含file.config registry.config 文件
修改registry.conf文件
我这里的配置中心使用的是Nacos 所以需要修改的地方是
type="naocs"
registry {
# file 、nacos 、eureka、redis、zk、consul、etcd3、sofa
type = "nacos" #修改为nacos
nacos {
application = "seata-server"
serverAddr = "47.92.95.239:8848"
group = "SEATA_GROUP"
namespace = "public"
cluster = "default"
#如果nacos开启了权限控制,请配置用户名密码
username = "nacos"
password = "nacos"
}
}
config {
# file、nacos 、apollo、zk、consul、etcd3
type = "nacos" #修改为nacos
nacos {
serverAddr = "47.92.95.239:8848"
namespace = "public"
group = "SEATA_GROUP"
#如果nacos开启了权限控制,请配置用户名密码
username = "nacos"
password = "nacos"
}
}
file.config文件
这里要注意 driverClassName 我使用的是阿里云的rds mysql8.0数据库,所以是com.mysql.cj.jdbc.driver 如果是8.0以下 是com.mysql.jdbc.driver
修改完毕后覆盖2个文件
目录是什么应该知道吧
替换完毕后 第一步算是完成了
第二步:进入到刚才解压后的第二个目录中Seata-1.4.0
前面我刚才说了。1.2.0的源码没有下载成功 我下载的是1.4.0
目录地址是 seata-1.4.0/script/config-center/nacos
在这之前需要去seata-1.4.0/script/config-center 找到conf.txt文件
里面的内容如下:
修改设置地方是
service.vgroupMapping.my_test_tx_group=default
service.default.grouplist=39.98.109.124:8091 Seata启动的地址和端口号
store.db.dbType=mysql
store.db.driverClassName=com.mysql.cj.jdbc.Driver
store.db.url=xxxxx
store.db.user=xxxx
store.db.password=xxxxx
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=39.98.109.124: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.jdbc.Driver
store.db.url=jdbc:mysql://xxxxxxxx/seata?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=Asia/Shanghai
store.db.user=xxxxx
store.db.password=xxxxx
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
client.log.exceptionRate=100
transport.serialization=seata
transport.compressor=none
metrics.enabled=false
metrics.registryType=compact
metrics.exporterList=prometheus
metrics.exporterPrometheusPort=9898
修改完毕后 覆盖原有的conf.txt文件
然后到seata-1.4.0/script/config-center/nacos目录下运行命令
sh nacos-config.sh -h xx.xx.xx.xxxx -p 8848
其中xx.xx.xx.xxxxx 是安装nacos的地址
提示没有失败后,打开nacos
查看是否上传成功
准备工作完成
下面可以运行Seata了
进入到目录seata/bin目录下
运行命令:
-p 后面是端口号
-h 后面是按照seata的外网地址,如果是本机测试可以写成127.0.0.1
sh seata-server.sh -p 8091 -h 39.xx.xx.xxxx
启动成功后:
Seata启动成功后
就要开始集成项目了.
Pom.xml 引用setata
<!-- seata -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-seata</artifactId>
<exclusions>
<exclusion>
<groupId>io.seata</groupId>
<artifactId>seata-spring-boot-starter</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>io.seata</groupId>
<artifactId>seata-spring-boot-starter</artifactId>
<version>1.2.0</version>
</dependency>
application.yml
seata:
enabled: true
application-id: ${spring.application.name}-seata
tx-service-group: my_test_tx_group
enable-auto-data-source-proxy: true
service:
vgroup-mapping:
my_test_tx_group: my_test_tx_group
grouplist:
- 39.xx.xx.xxx:8091
#- xxxxxxx.8093
config:
type: nacos
#file:
# name: file.conf 【namespace: seata-config-1】
nacos:
namespace:
serverAddr: 47.xx.xx.xxx:8848
group: SEATA_GROUP
userName: "nacos"
password: "nacos"
registry:
type: nacos
nacos:
#与seata server的registry.conf的nacos名字相同
application: seata-server
server-addr: 47.xx.xx.xxx:8848
namespace:
userName: "nacos"
password: "nacos"
Application.Java
@EnableAutoDataSourceProxy
使用使用
我在service里面的方法中加入注解
@GlobalTransactional
启动项目
可以在seata中看到已经注册成功并且能够回滚