赞
踩
本文主要介绍SpringBoot2.2.2 + Dubbo 2.7.5 + Nacos 1.1.3 +Seata 1.4.2整合来实现Dubbo分布式事务管理,使用Nacos 作为 Dubbo和Seata的注册中心和配置中心,使用 MySQL 数据库和 MyBatis来操作数据。
如果你还对SpringBoot
、Dubbo
、Nacos
、Seata
、Mybatis
不是很了解的话,可以从以下官网中了解基本的使用方法。
SpringBoot:Spring Boot
MyBatis:mybatis – MyBatis 3 | 简介
nacos下载:https://github.com/alibaba/nacos/releases/tag/1.1.3
Nacos 快速入门:Quick Start for Nacos
/=============== 注意:这个快速入门,有坑,官方文档缺失: =====================
下载Nacos后需要先:
1.创建nacos的数据库,并导入nacos-mysql.sql文件,创建nacos所需要的表;
2.配置数据库: 找到conf下的application.properties,把db的配置打开,正确找到你的数据库连接
- spring.datasource.platform=mysql
- db.num=1
- db.url.0=jdbc:mysql://127.0.0.1:3306/nacos?characterEncoding=utf8&connectTimeout=10000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC
- db.user.0=root
- db.password.0=root
报错问题:
直接双击startup.cmd可能会报错, 如果你已经配置了数据库,也建好了表,那么就考虑是集群和单机的问题。 从源码上下载的zip压缩包方式,默认是使用集群方式的,在conf下的application.properties下可以设置以集群还是单机启动,也可以使用命令
cmd startup.cmd -m standalone
或者修改startup.cmd指定mode=standalone,如下
- set MODE="standalone"
- set FUNCTION_MODE="all"
- set SERVER=nacos-server
- set MODE_INDEX=-1
- set FUNCTION_MODE_INDEX=-1
- set SERVER_INDEX=-1
- set EMBEDDED_STORAGE_INDEX=-1
- set EMBEDDED_STORAGE=""
============== 注意:这个快速入门,有坑,官方文档缺失END: ============
启动命令 :
sh startup.sh -m standalone
startup.cmd -m standalone
在浏览器打开Nacos web 控制台:http://192.168.10.200:8848/nacos/index.html
输入nacos的账号和密码 分别为nacos:nacos
这是时候naocs 就正常启动了。
名称:state-test, 描述等随便写。 发布后会得到一个唯一ID(seate注册到nacos的时候要用到)
目前seata支持如下的file、nacos 、apollo、zk、consul的注册中心和配置中心。这里我们以nacos
为例。将 type 改为 nacos
- registry {
- # file 、nacos 、eureka、redis、zk、consul、etcd3、sofa
- type = "nacos"
-
- nacos {
- application = "seata-server"
- serverAddr = "127.0.0.1:8848"
- group = "SEATA_GROUP"
- namespace = "70e93027-ba24-4b45-9ecf-971e6b8e7f04"
- cluster = "default"
- username = "nacos"
- password = "nacos"
- }
-
- }
-
- config {
- # file、nacos 、apollo、zk、consul、etcd3
- type = "nacos"
-
- nacos {
- serverAddr = "127.0.0.1:8848"
- namespace = "70e93027-ba24-4b45-9ecf-971e6b8e7f04"
- group = "SEATA_GROUP"
- username = "nacos"
- password = "nacos"
- dataId = "seataServer.properties"
- }
-
- }
serverAddr = "127.0.0.1:8848" :nacos 的地址
namespace = "" :nacos的命名空间默认为``
cluster = "default" :集群设置未默认 default
** 经过本人亲测seata-service1.4.2版本,namespace要指定nacos的命名空间,账号密码也要
**注意:官方文档中有说明 seata0.9.0之后,配置namespace = "",可能有部分旧版本是如此。
- transport.type=TCP
- transport.server=NIO
- transport.heartbeat=true
- transport.thread-factory.boss-thread-prefix=NettyBoss
- transport.thread-factory.worker-thread-prefix=NettyServerNIOWorker
- transport.thread-factory.server-executor-thread-prefix=NettyServerBizHandler
- transport.thread-factory.share-boss-worker=false
- transport.thread-factory.client-selector-thread-prefix=NettyClientSelector
- transport.thread-factory.client-selector-thread-size=1
- transport.thread-factory.client-worker-thread-prefix=NettyClientWorkerThread
- transport.thread-factory.boss-thread-size=1
- transport.thread-factory.worker-thread-size=8
- transport.shutdown.wait=3
- service.vgroup_mapping.order-service-seata-service-group=default
- service.vgroup_mapping.account-service-seata-service-group=default
- service.vgroup_mapping.storage-service-seata-service-group=default
- service.vgroup_mapping.business-service-seata-service-group=default
- service.enableDegrade=false
- service.disable=false
- service.max.commit.retry.timeout=-1
- service.max.rollback.retry.timeout=-1
- client.async.commit.buffer.limit=10000
- client.lock.retry.internal=10
- client.lock.retry.times=30
- store.mode=db
- store.file.dir=file_store/data
- store.file.max-branch-session-size=16384
- store.file.max-global-session-size=512
- store.file.file-write-buffer-cache-size=16384
- store.file.flush-disk-mode=async
- store.file.session.reload.read_size=100
- store.db.driver-class-name=com.mysql.jdbc.Driver
- store.db.datasource=dbcp
- store.db.db-type=mysql
- store.db.url=jdbc:mysql://192.168.10.200:3306/seata?useUnicode=true
- store.db.user=lidong
- store.db.password=cwj887766@@
- store.db.min-conn=1
- store.db.max-conn=3
- store.db.global.table=global_table
- store.db.branch.table=branch_table
- store.db.query-limit=100
- store.db.lock-table=lock_table
- recovery.committing-retry-period=1000
- recovery.asyn-committing-retry-period=1000
- recovery.rollbacking-retry-period=1000
- recovery.timeout-retry-period=1000
- transaction.undo.data.validation=true
- transaction.undo.log.serialization=jackson
- transaction.undo.log.save.days=7
- transaction.undo.log.delete.period=86400000
- transaction.undo.log.table=undo_log
- transport.serialization=seata
- transport.compressor=none
- metrics.enabled=false
- metrics.registry-type=compact
- metrics.exporter-list=prometheus
- metrics.exporter-prometheus-port=9898
- client.report.retry.count=5
- service.disableGlobalTransaction=false
- client.support.spring.datasource.autoproxy=true
配置的详细说明参考官网:Seata 参数配置
这里主要修改了如下几项:
store.mode :存储模式 默认file 这里我修改为db 模式 ,并且需要三个表global_table
、branch_table
和lock_table
store.db.driver-class-name: 0.8.0版本默认没有,会报错。添加了 com.mysql.jdbc.Driver
store.db.datasource=dbcp :数据源 dbcp
store.db.db-type=mysql : 存储数据库的类型为mysql</
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。