前言
因为一直在更新文章和其他一些事情,微服务的学习进度有一些落后,所以昨天晚上不得不赶进度学习了Seata和一些分布式事务的内容
( Ĭ ^ Ĭ ) ( Ĭ ^ Ĭ ) ( Ĭ ^ Ĭ )
回归正传今天带领大家学习一下Seata的安装和大家常见的一个错误的解决方案
一、安装Seata的准备?
我们首先下载Seata并解压在本地非中文目录,本章节所安装是在window环境下,各位可自行下载,下载地址为:Seata-Server下载 | Apache Seata。
安装步骤如下:
二、修改conf目录下的registry.conf文件
文件的内容如下如下(因为是nacos集成,所以配置文件中只配置了nacos):
registry { #服务的注册中心类选择nacos type = "nacos" nacos { #Seata服务注册到nacos的服务名称 application = "seata-tc-server" #nacos的地址,nacos的默认启动端口一般都是本机的8848端口 serverAddr = "127.0.0.1:8848" #当前服务所在nacos的分组 group = "DEFAULT_GROUP" #这个在做配置时一般不用配置 namespace = "" #集群名称,你的Seata可能需要部署很多的集群,所以指定集群名称 cluster = "SH" #nacos的用户名和登录密码,根据自己的nacos进行填写 username = "nacos" password = "nacos" } } config { #配置中心seata将来可能会是集群,所以需要将配置文件交给nacos管理 type = "nacos" nacos { serverAddr = "127.0.0.1:8848" namespace = "" #配置管理的组 group = "SEATA_GROUP" username = "nacos" password = "nacos" #配置文件名 dataId = "seataServer.properties" } }
三、nacos添加配置
新建配置Data ID为:seataServer.properties、group为SEATA_GROUP、填写配置文件内容,配置文件格式为properties
#配置文件内容来自第三方、如有侵权行为请联系本人
# 数据存储方式,db代表数据库
store.mode=db
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/seata?useUnicode=true&rewriteBatchedStatements=true
store.db.user=root
store.db.password=123
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
# 事务、日志等配置
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.undo.logSaveDays=7
server.undo.logDeletePeriod=86400000# 客户端与服务端传输方式
transport.serialization=seata
transport.compressor=none
# 关闭metrics功能,提高性能
metrics.enabled=false
metrics.registryType=compact
metrics.exporterList=prometheus
metrics.exporterPrometheusPort=9898
五、创建数据库表
这里提供的是第三方的资料创建表
/*
Navicat Premium Data TransferSource Server : local
Source Server Type : MySQL
Source Server Version : 50622
Source Host : localhost:3306
Source Schema : seata_demoTarget Server Type : MySQL
Target Server Version : 50622
File Encoding : 65001Date: 20/06/2021 12:38:37
*/SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;-- ----------------------------
-- Table structure for branch_table
-- ----------------------------
DROP TABLE IF EXISTS `branch_table`;
CREATE TABLE `branch_table` (
`branch_id` bigint(20) NOT NULL,
`xid` varchar(128) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
`transaction_id` bigint(20) NULL DEFAULT NULL,
`resource_group_id` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
`resource_id` varchar(256) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
`branch_type` varchar(8) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
`status` tinyint(4) NULL DEFAULT NULL,
`client_id` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
`application_data` varchar(2000) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
`gmt_create` datetime(6) NULL DEFAULT NULL,
`gmt_modified` datetime(6) NULL DEFAULT NULL,
PRIMARY KEY (`branch_id`) USING BTREE,
INDEX `idx_xid`(`xid`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Compact;-- ----------------------------
-- Records of branch_table
-- ------------------------------ ----------------------------
-- Table structure for global_table
-- ----------------------------
DROP TABLE IF EXISTS `global_table`;
CREATE TABLE `global_table` (
`xid` varchar(128) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
`transaction_id` bigint(20) NULL DEFAULT NULL,
`status` tinyint(4) NOT NULL,
`application_id` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
`transaction_service_group` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
`transaction_name` varchar(128) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
`timeout` int(11) NULL DEFAULT NULL,
`begin_time` bigint(20) NULL DEFAULT NULL,
`application_data` varchar(2000) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
`gmt_create` datetime NULL DEFAULT NULL,
`gmt_modified` datetime NULL DEFAULT NULL,
PRIMARY KEY (`xid`) USING BTREE,
INDEX `idx_gmt_modified_status`(`gmt_modified`, `status`) USING BTREE,
INDEX `idx_transaction_id`(`transaction_id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Compact;-- ----------------------------
-- Records of global_table
-- ----------------------------
-- ----------------------------
-- Records of lock_table
-- ----------------------------SET FOREIGN_KEY_CHECKS = 1;
六、启动TC服务
在解压后的文件,bin目录下运行seata-server.bat即可,打开浏览器,访问nacos地址:http://localhost:8848(nacos的地址),可以看到seata-tc-server的信息
七、报错解决
可能大家进行第六步的时候发现出现了报错,报错内容可能跟图片上的一样
本人也是出现了这个问题,在长达一个几个小时的搜索中发现大多人都会遇到这个问题,然而网上给出的解决方案就是降低jdk的版本,使用jdk8版本,当然大家可能会问我就是想要使用当前的版本,有没有什么解决方案呢?就是不想要改变版本,一身反骨,像博主一样,当然经过博主的不懈努力也是找到了一个解决的方案。
以txt的形式打开seata-server.bat文件,或者nodepat++也可以,将原来的%JAVACMD%”"" set JAVACMD=java 修改成 if “%JAVACMD%”"" set JAVACMD=“自己的javahome\bin\java.exe”。
这样可能能够解决问题,如果不能建议大家降低jdk的版本
总结
根据步骤相信大家能很快容易的部署完成,一晚上的时间都大部分都花在了解决报错上面,真的是 ( Ĭ ^ Ĭ ) ( Ĭ ^ Ĭ ) ( Ĭ ^ Ĭ ) ( Ĭ ^ Ĭ )
最后建议的家在配置的时候一定要按照对的版本!!!!!