【分布式事务-02】分布式事务seata的安装下载与环境搭建

news2024/11/25 5:06:25

redis系列整体栏目


内容链接地址
【一】分布式事务之2pc两阶段提交https://zhenghuisheng.blog.csdn.net/article/details/142406325
【一】分布式事务seata的安装下载与环境搭建https://zhenghuisheng.blog.csdn.net/article/details/142893117

分布式事务seata的安装下载与环境搭建

  • 一,分布式事务seata的安装下载与环境搭建
    • 1,seata安装
    • 2,nacos实现配置中心
    • 3,seata启动运行

一,分布式事务seata的安装下载与环境搭建

在前一篇文章中,讲解了两阶段提交的底层原理,在所有的分布式事务中,其核心思想都是通过两阶段提交作为基本理念实现的。在本文中,讲解的就是一个通过2pc两阶段提交的实现的seata,他是阿里开源的一个分布式事务的框架,解决了2pc两阶段提交所带来的缺陷。

在学习seata之前,可以先看一下的中文官网:https://seata.apache.org/zh-cn/

在这里插入图片描述

1,seata安装

接下来先讲解一下seata的安装,先在官网下载安装包:https://seata.apache.org/unversioned/release-history/seata-server ,这里用的是seata的历史版本1.7版本,直接下来1.7.1.zip包即可

在这里插入图片描述

下载后解压目录如下

在这里插入图片描述

在/script/server/db 目录下,选择mysql.sql,然后将里面的sql脚本执行导入到mysql数据库

在这里插入图片描述

随后会产生4张表,分别是分支表、分布式锁表、全局表和本地事务锁表

在这里插入图片描述

2,nacos实现配置中心

上一篇讲解了2pc两阶段提交 ,主要有TM事务管理器和RM资源管理器,在seata分布式事务中,引入了一个新组件TC事务协调器,TM和RM都是处于服务内部本身,TC抽取出来单独部署

在这里插入图片描述

因此为了TC和其他两种之间的通信,可以直接通过nacos作为配置中心和注册中心,这样将微服务中的组件和TC组件信息全部注册到nacos,从而实现微服务与TC服务之间的通信和管理

接下来就是在nacos中配置seata的配置信息,首先新建一个配置中心,DATAID取名为seataServer.properties ,Group取名为SEATA_GROUP

在这里插入图片描述

配置内容为安装目录下的/script/config-center文件夹下的config.txt文件中的内容

在这里插入图片描述

其主要内容如下,值得注意的是,需要修改mysql的连接、用户名和密码。tore.mode需要修改设置成db

#For details about configuration items, see https://seata.io/zh-cn/docs/user/configurations.html
#Transport configuration, for client and server
transport.type=TCP
transport.server=NIO
transport.heartbeat=true
transport.enableTmClientBatchSendRequest=false
transport.enableRmClientBatchSendRequest=true
transport.enableTcServerBatchSendResponse=false
transport.rpcRmRequestTimeout=30000
transport.rpcTmRequestTimeout=30000
transport.rpcTcRequestTimeout=30000
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
transport.serialization=seata
transport.compressor=none

#Transaction routing rules configuration, only for the client
service.vgroupMapping.default_tx_group=default
#If you use a registry, you can ignore it
service.default.grouplist=127.0.0.1:8091
service.enableDegrade=false
service.disableGlobalTransaction=false

#Transaction rule configuration, only for the client
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=true
client.rm.tableMetaCheckerInterval=60000
client.rm.sqlParserType=druid
client.rm.reportSuccessEnable=false
client.rm.sagaBranchRegisterEnable=false
client.rm.sagaJsonParser=fastjson
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
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
#For TCC transaction mode
tcc.fence.logTableName=tcc_fence_log
tcc.fence.cleanPeriod=1h

#Log rule configuration, for client and server
log.exceptionRate=100

#Transaction storage configuration, only for the server. The file, db, and redis configuration values are optional.
store.mode=db
store.lock.mode=db
store.session.mode=db
#Used for password encryption
store.publicKey=

#If `store.mode,store.lock.mode,store.session.mode` are not equal to `file`, you can remove the configuration block.
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

#These configurations are required if the `store mode` is `db`. If `store.mode,store.lock.mode,store.session.mode` are not equal to `db`, you can remove the configuration block.
store.db.datasource=druid
store.db.dbType=mysql
store.db.driverClassName=com.mysql.cj.jdbc.Driver
store.db.url=jdbc:mysql://127.0.0.1:3306/seata?useUnicode=true&rewriteBatchedStatements=true
store.db.user=root
store.db.password=zhs123456
store.db.minConn=5
store.db.maxConn=30
store.db.globalTable=global_table
store.db.branchTable=branch_table
store.db.distributedLockTable=distributed_lock
store.db.queryLimit=100
store.db.lockTable=lock_table
store.db.maxWait=5000

#These configurations are required if the `store mode` is `redis`. If `store.mode,store.lock.mode,store.session.mode` are not equal to `redis`, you can remove the configuration block.
store.redis.mode=single
store.redis.single.host=127.0.0.1
store.redis.single.port=6379
store.redis.sentinel.masterName=
store.redis.sentinel.sentinelHosts=
store.redis.maxConn=10
store.redis.minConn=1
store.redis.maxTotal=100
store.redis.database=0
store.redis.password=
store.redis.queryLimit=100

#Transaction rule configuration, only for the server
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
server.xaerNotaRetryTimeout=60000
server.session.branchAsyncQueueSize=5000
server.session.enableBranchAsyncRemove=false
server.enableParallelRequestHandle=false

#Metrics configuration, only for the server
metrics.enabled=false
metrics.registryType=compact
metrics.exporterList=prometheus
metrics.exporterPrometheusPort=9898

与源文件对比,主要要修改的就是这几个地方,分别是3个mode,还有一个就是mysql版本,如果时8那驱动需要加一个cj,然后就是修改数据库的用户名和密码

store.mode=db
store.lock.mode=db
store.session.mode=db
store.db.driverClassName=com.mysql.cj.jdbc.Driver
store.db.url=jdbc:mysql://127.0.0.1:3306/seata?useUnicode=true&rewriteBatchedStatements=true
store.db.user=root
store.db.password=zhs123456    

保存配置之后,可以直接在配置中心中查看到相关配置

在这里插入图片描述

随后打开安装目录下的conf文件夹,修改下面的 application.yml 配置文件,主要就是将当前服务注册到nacos中,实现服务注册功能,同时需要修改配置中心的内容,需要将当前服务加入到配置中心里面

seata:
  config:
    # support: nacos, consul, apollo, zk, etcd3
    type: nacos
    nacos:
        server-addr: 127.0.0.1:8848
        namespace: 7e838c12-8554-4231-82d5-6d93573ddf32
        group: SEATA_GROUP
        data-id: seataServer.properties
  registry:
    # support: nacos, eureka, redis, zk, consul, etcd3, sofa
    type: nacos
    nacos:
        application: seata-server
        server-addr: 127.0.0.1:8848
        group: SEATA_GROUP
        cluster: default
  store:
    # support: file 、 db 、 redis
    mode: db

3,seata启动运行

切换到安装目录下的bin目录,由于我直接安装在windows上面,因此直接执行bat命令即可

在这里插入图片描述

执行完命令之后,可以发现seata已经启动成功,其本质就是一个jvm进程,如果启动失败就调整最小堆内存和最大堆内存空间

在这里插入图片描述

在成功启动这个seata之后,可以在nacos中发现当前服务已经注册成功,分组名称服务名称就是配置文件中设置的

在这里插入图片描述

随后打开seata可视化界面,账户名和密码都是 seata

localhost:7091

在这里插入图片描述

可以看到内部的可视化界面如下,里面包含了一些事务信息和全局锁信息等

在这里插入图片描述

到此seata基于mysql和nacos的分布式事务都搭建完毕!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2212002.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

java服务器技术

1. Java EE(Java Enterprise Edition) Java EE是一套为企业级应用提供的完整解决方案,它包括了Java Servlet、JSP(JavaServer Pages)、EJB(Enterprise JavaBeans)、JPA(Java Persist…

【风力发电】基于模糊逻辑控制的风电系统MPPT

摘要 本文基于模糊逻辑控制 (Fuzzy Logic Control, FLC) 实现了风力发电系统的最大功率点追踪 (MPPT)。FLC 由于其不依赖于精确数学模型的特点,能够有效应对风速变化导致的非线性和不确定性问题。通过对风速和功率的模糊化处理,该方法提高了风电系统的功…

ros1:使用C++编写ros程序,获取IMU数据,使用gazebo仿真

cd catkin_ws/src/catkin_create_pkg imu_pkg roscpp rospy sensor_msgs在src目录下创建,imu_node.cpp #include "ros/ros.h" #include "sensor_msgs/Imu.h" #include "tf/tf.h"void IMUCallback(sensor_msgs::Imu msg){if(msg.orien…

深兰科技|“武汉市AI心理热线医工交叉研发合作基地”正式揭牌

2024年10月10日是第33个世界精神卫生日,以“共建共治共享,同心健心安心“为主题的武汉市2024年世界精神卫生日主题活动暨第三届武汉青年心理情景剧展演闭幕式,在武汉隆重举行。期间,还举行了武汉市精神卫生中心与深兰科技(武汉)公…

Video-LLaMA部署

Video-LLaMA: An Instruction-tuned Audio-Visual Language Model for Video Understanding

计组_输入输出系统

2024.08.05:计算机组成原理输入输出学习笔记 第25节 输入输出系统 5.1 IO基本职能5.2 IO接口的通用结构5.3 IO数据传送控制方式5.3.1 程序直接控制(程序查询控制)(1)独占查询(2)定时查询 5.3.2 …

衡石分析平台---分析人员手册

分析人员是 HENGSHI SENSE 系统最主要的用户。在企业内部,他们应该是了解相关业务,需要在纷繁复杂的数据中发现数据规律的人。 从岗位上来说,他们可能来自运营部门,需要从日常运营数据中发现用户的使用规律;可能来自销…

【element-tiptap】如何引进系统中的字体?

源码地址: https://github.com/Leecason/element-tiptap 源码中给出的字体如下 可以看到,咱们日常需要的黑体、微软雅黑等都没有,所以这篇文章来探索一下怎么加字体。 另外呢,肯定有小伙伴发现,这个按钮点击的时候&am…

ssm资产管理信息系统+vue

系统包含:源码论文 所用技术:SpringBootVueSSMMybatisMysql 免费提供给大家参考或者学习,获取源码请私聊我 需要定制请私聊 目录 摘要 I Abstract II 1 绪论 - 1 - 1.1 研究背景与意义 - 1 - 1.1.1 研究背景 - 1 - 1.1.2 研究意义 …

jQuery——区别onload和ready

区别:window.onload 与 $(document). ready() window.onload 包括页面的图片加载完后才会回调(晚)只能有一个监听回调 $(document). ready() 等同…

echarts图例右侧竖向排列

实操链接戳这里哈 left代表图例在水平放置的位置,有left、center、right top代表图例在垂直方向的位置,有top、middle、bottom width是最主要的,当设置的宽度比较小时,才会迫使图例换行,从而形成竖直排列的现像。 lege…

MySQL:小练习

安装MySQL并且创建库和表 一, windows采用zip安装MySQL1. 卸载已有的MySQL2. 下载zip格式3. 解压缩4. 配置环境变量5. 创建配置文件6. 初始化mysql服务 二, 新建产品库mydb6_product,新建三张表 一, windows采用zip安装MySQL 1. …

【conda】创建、激活、删除虚拟环境

前言一、创建虚拟环境二、删除虚拟环境总结 前言 主要是记录一下步骤 一、创建虚拟环境 地址栏输入cmd,唤起命令符栏目,就可以在指定目录下创建虚拟环境了。 这样方便日后在pycharm直接配置虚拟环境。 conda create -n yolo5-lite python3.9 -y简单来说…

书店仓库管理系统 (论文+源码)-kaic

摘 要 仓库是储存货物的核心,是现代社会物质生产的必要条件。为了保障货物的 质量和准备货物进入市场的工作,一个良好的仓库布局环境尤为重要。例如书店仓库管理中的功能分区不够清晰、书本摆放混乱、通道设计不合理等。因此,我们需要对这些…

3D医学影像开发入门<二>:VS2019+Qt5.15.2+VTK9.3.1编译及环境配置

VTK(Visualization Toolkit)是一个开源的、跨平台的三维可视化开发库,用于处理和可视化三维数据。它提供了一系列算法和工具,用于创建、操作和渲染复杂的三维图形,并支持多种数据表示方式,包括点、线、面、…

传值与传址

目录 前言1.基础2.实际计算 前言 这是在软考中软件设计师有关的考点,关于程序设计基础——传值与传址 1.基础 传值和传址是两种不同的参数传递方式。 传值(传递值)是指将参数的副本传递给函数或方法。在函数或方法中对参数的任何修改不会影…

WebGL 入门学习

1. WebGL是什么? WebGL(Web Graphics Library)是一种JavaScript API,它允许你在不需要安装任何额外插件的情况下,直接在浏览器中渲染高性能的2D和3D图形。WebGL利用了用户的图形处理单元(GPU)来…

竹壳天气时钟(二)第二阶段任务已完成

一、简介 准备用基于esp8266的nodemcu开发板做一个天气时钟。 一步一步记录代码编写过程。 竹壳天气时钟 Bamboo shell weather clock 使用基于esp8266的NodeMCU制作。 计划用竹子做最后成品的外壳,所以才有了这个名称。 第一阶段任务: 1.开启混合模式&…

【吊打面试官系列-微服务面试题】单片,SOA 和微服务架构有什么区别?

大家好,我是锋哥。今天分享关于【单片,SOA 和微服务架构有什么区别?】面试题,希望对大家有帮助; 单片,SOA 和微服务架构有什么区别? 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 …

基于SSM框架学籍管理系统的设计与实现

我 | 在这里 ⭐ 全栈开发攻城狮、全网10W粉丝、2022博客之星后端领域Top1、专家博主。 🎓擅长 指导毕设 | 论文指导 | 系统开发 | 毕业答辩 | 系统讲解等。已指导60位同学顺利毕业 ✈️个人公众号:乡下小哥编程。回复 Java全套视频教程 或 前端全套视频教…