seata1.6.0 单机,集群搭建 基于nacos注册中心 mysql数据库

news2024/11/16 17:27:38

seata1.6.0 单机,集群搭建 基于nacos注册中心 mysql数据库

大纲

  • 1 单机搭建
  • 2 集群搭建

由于项目中的dubbo版本为2.6.0 故客户端程序(TM RM)使用seata-all 1.4.2 ,服务端(TC)使用seata-server-1.6.0.zip
nacos版本 1.3.2

名词解释:

  • 单机: 指 seata TC服务器单机
  • 集群: 指 seata TC服务器为多个
  • nacos: 指 TC服务的配置 和 客户端程序(TM RM)配置又nacos管理
  • 数据库存储: 指事务数据(TC端)保存到数据库中

所以整体涉及两部分服务端(TC)的配置和客户端程序(TM RM)配置

单机搭建-部署流程

step1 nacos配置

nacos的作用:

  • 1 对服务端(TC)和客户端(TM RM)提供配置中心的功能
  • 2 对TC端作为注册中心,TC把自己的ip注册到nacos
  • 3 对(TM RM)端作为注册中心,TM RM可以从nacos中获取TC端的ip

nacos创建命名空间

例如创建一个命名空间  seata_config

在这里插入图片描述

创建配置信息

这个配置 TC TM RM 都会使用这个配置

在这里插入图片描述

配置 DataId 和 组名称 并预留服务端 和 客户端的配置 后面在来填充

在这里插入图片描述
到此 nacos基础配置完成

注意 seata-all 1.4.2之前每一个配置需要创建一个dataId,无法使用一个dataId保存所有配置

step2 服务端(TC)的配置

服务端(TC)的配置主要有以下操作

  • 1 数据库初始化
  • 2 application.yaml文件修改
  • 3 在nacos配置中加入服务端的配置和数据库的配置

step2-1 数据库初始化

在seata解压文件下找到 /script/server/db文件夹,这里有数据库表初始化脚本

在这里插入图片描述

使用mysql.sql脚本实现初始化数据库信息,注意需要先自己创建数据库

例如
CREATE SCHEMA `seata_db` DEFAULT CHARACTER SET utf8mb4 ;

mysql.sql脚本如下

-- -------------------------------- The script used when storeMode is 'db' --------------------------------
-- the table to store GlobalSession data

CREATE TABLE IF NOT EXISTS `global_table`
(
    `xid`                       VARCHAR(128) NOT NULL,
    `transaction_id`            BIGINT,
    `status`                    TINYINT      NOT NULL,
    `application_id`            VARCHAR(32),
    `transaction_service_group` VARCHAR(32),
    `transaction_name`          VARCHAR(128),
    `timeout`                   INT,
    `begin_time`                BIGINT,
    `application_data`          VARCHAR(2000),
    `gmt_create`                DATETIME,
    `gmt_modified`              DATETIME,
    PRIMARY KEY (`xid`),
    KEY `idx_status_gmt_modified` (`status` , `gmt_modified`),
    KEY `idx_transaction_id` (`transaction_id`)
) ENGINE = InnoDB
  DEFAULT CHARSET = utf8mb4;

-- the table to store BranchSession data
CREATE TABLE IF NOT EXISTS `branch_table`
(
    `branch_id`         BIGINT       NOT NULL,
    `xid`               VARCHAR(128) NOT NULL,
    `transaction_id`    BIGINT,
    `resource_group_id` VARCHAR(32),
    `resource_id`       VARCHAR(256),
    `branch_type`       VARCHAR(8),
    `status`            TINYINT,
    `client_id`         VARCHAR(64),
    `application_data`  VARCHAR(2000),
    `gmt_create`        DATETIME(6),
    `gmt_modified`      DATETIME(6),
    PRIMARY KEY (`branch_id`),
    KEY `idx_xid` (`xid`)
) ENGINE = InnoDB
  DEFAULT CHARSET = utf8mb4;

-- the table to store lock data
CREATE TABLE IF NOT EXISTS `lock_table`
(
    `row_key`        VARCHAR(128) NOT NULL,
    `xid`            VARCHAR(128),
    `transaction_id` BIGINT,
    `branch_id`      BIGINT       NOT NULL,
    `resource_id`    VARCHAR(256),
    `table_name`     VARCHAR(32),
    `pk`             VARCHAR(36),
    `status`         TINYINT      NOT NULL DEFAULT '0' COMMENT '0:locked ,1:rollbacking',
    `gmt_create`     DATETIME,
    `gmt_modified`   DATETIME,
    PRIMARY KEY (`row_key`),
    KEY `idx_status` (`status`),
    KEY `idx_branch_id` (`branch_id`),
    KEY `idx_xid` (`xid`)
) ENGINE = InnoDB
  DEFAULT CHARSET = utf8mb4;

CREATE TABLE IF NOT EXISTS `distributed_lock`
(
    `lock_key`       CHAR(20) NOT NULL,
    `lock_value`     VARCHAR(20) NOT NULL,
    `expire`         BIGINT,
    primary key (`lock_key`)
) ENGINE = InnoDB
  DEFAULT CHARSET = utf8mb4;

INSERT INTO `distributed_lock` (lock_key, lock_value, expire) VALUES ('AsyncCommitting', ' ', 0);
INSERT INTO `distributed_lock` (lock_key, lock_value, expire) VALUES ('RetryCommitting', ' ', 0);
INSERT INTO `distributed_lock` (lock_key, lock_value, expire) VALUES ('RetryRollbacking', ' ', 0);
INSERT INTO `distributed_lock` (lock_key, lock_value, expire) VALUES ('TxTimeoutCheck', ' ', 0);

step2-2 application.yml文件修改

在seata解压文件下找到 /conf文件夹,这里seata服务端启动配置文件application.yml

在这里插入图片描述

注释掉默认的type:file 替换为nacos相关配置

在这里插入图片描述

seata:
  config:
    # support: nacos, consul, apollo, zk, etcd3
    #type: file
    type: nacos
    nacos:
      server-addr: 192.168.0.206:8248
      namespace: 8422b4bf-8b04-406e-8295-39d4968b2ec4
      group: DEFAULT_GROUP
      data-id: seata.properties
      #username:
      #password:        
  registry:
    # support: nacos, eureka, redis, zk, consul, etcd3, sofa
    #type: file
    type: nacos
    nacos:
      application: seata-server
      server-addr: 192.168.0.206:8248
      namespace: 8422b4bf-8b04-406e-8295-39d4968b2ec4
      group: DEFAULT_GROUP
      cluster: default

修改完成后保存 服务端(TC)配置完成

step2-3 在nacos配置中加入TC服务端的配置和数据库的配置

再次打开nacos 修改配置

添加如下内容(这是服务的最小配置,如果有其他配置需求可以参考 https://seata.io/zh-cn/docs/user/configurations.html 再添加)

store.mode=db
store.db.datasource=druid
store.db.dbType=mysql
# 需要根据mysql的版本调整driverClassName
# mysql8及以上版本对应的driver:com.mysql.cj.jdbc.Driver
# mysql8以下版本的driver:com.mysql.jdbc.Driver
store.db.driverClassName=com.mysql.jdbc.Driver
store.db.url=jdbc:mysql://192.168.0.206:3306/seata_db?useUnicode=true&characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useSSL=false
store.db.user=root
store.db.password=123456

在这里插入图片描述

修改完成后点击发布,此时可以启动服务端了

./seata-server.sh -h 192.168.0.160 -p 5959 

在这里插入图片描述

注意 如果主机有多个网卡需要使用 -h 指定注册ip

nacos 中可以看到seata已经成功注册

在这里插入图片描述

step3 客户端(TM RM)的配置

step3-1 程序依赖调整

由于历史原因程序是使用dubbo2.6.0 故seata-all版本这里使用1.4.2

<dependency>
    <groupId>io.seata</groupId>
    <artifactId>seata-all</artifactId>
    <version>1.4.2</version>
</dependency>

由于是使用nacos作为 注册中心 和 配置中心 所以在程序的pom.xml先加入nacos相关依赖

<dependency>
	<groupId>com.alibaba.boot</groupId>
	<artifactId>nacos-config-spring-boot-starter</artifactId>
	<version>0.2.7</version>
</dependency>

代码中调整

  • 1 DataSourceProxy来代理dataSource
  • 2 创建GlobalTransactionScanner注意指定applicationId 和 txServiceGroup
	/**
	 * 数据源代理配置
	 * Seata提供的DataSourceProxy 用来统一提交 或者 回滚
	 */
	@Bean
    public DataSourceProxy dataSourceProxy(@Qualifier("dataSource1") DataSource dataSource){
        return new DataSourceProxy(dataSource);
    }
	
	
	/**
	 * 分布式事务管理器
	 * 需要配置
	 * applicationId  任意最好是当前项目的名称
	 * txServiceGroup 组名称  相关的分布式服务使用同一个组名称
	 * 
	 * 注意registry.conf 配置文件 需要修改为zk 或者 nacos
	 */	 
	@Bean
    public GlobalTransactionScanner globalTransactionScanner(){
		String applicationId = "order-service"; //本地服务名称 服务id
		String txServiceGroup = "my_dubbo_tx_group"; //指定事务服务组的名称 相关的业务应该在同一个组中
        return new GlobalTransactionScanner(applicationId, txServiceGroup);
    }
	
	/**
	 * 注意这里变成了DataSourceProxy
	 * @param dataSourceProxy
	 * @return
	 */
	@Bean(name="transactionManager")
	public PlatformTransactionManager annotationDrivenTransactionManager(DataSourceProxy dataSourceProxy) {
		return new DataSourceTransactionManager(dataSourceProxy);
	}

step2-2 程序中修改registry.conf配置

seata-all1.5.1使用的registry.conf来管理配置

registry.conf内容如下

# 此配置为客户端最小可以配置
registry {
  
   #使用nacos注册中心 
   type="nacos"

  #以下配置对应相关的type类型 
  nacos {
    #seata-server名称
    application = "seata-server"
    cluster = "default"
    # 指定nacos注册中心地址
    serverAddr = "192.168.0.206:8248"
    
    # 指定组名 (seata TC服务端配置 可以在nacos 服务列表中查看对应的seata tc 服务组名)
    group = "DEFAULT_GROUP"
    
    # 指定 seata TC服务名字空间的id
    namespace = "8422b4bf-8b04-406e-8295-39d4968b2ec4"
    #username = ""
    #password = ""
  }
    
}

config {
  
  #使用nacos配置中心 
  type="nacos"

 nacos {
     
     # 指定nacos配置中心地址
    serverAddr = "192.168.0.206:8248"
  #使用一个dataId 保存所有客户端配置容器 
    dataId="seata.properties"
    # 指定组名 (seata TC服务端配置 可以在nacos 服务列表中查看对应的seata tc 服务组名)
    group = "DEFAULT_GROUP"

    # 指定 seata TC服务名字空间的id
    namespace = "8422b4bf-8b04-406e-8295-39d4968b2ec4"
    #username = ""
    #password = ""
  }

}

项目结构如图

在这里插入图片描述

step2-3 在nacos配置中加入客户端的配置

再次打开nacos 修改配置

添加如下内容(这是客户的最小配置,如果有其他配置需求可以参考 https://seata.io/zh-cn/docs/user/configurations.html 再添加)

service.vgroupMapping.my_dubbo_tx_group=default

在这里插入图片描述

启动客户端程序在seata-server端日志中可以看到 客户端已经注册成功

在这里插入图片描述

集群搭建-部署流程

集群版和 单机+nacos+数据库存储配置都是一致,只是集群版会启动多个TC服务端

启动多个TC服务端 注意使用-n 配置节点id

机器IP 192.168.0.160
./seata-server.sh -h 192.168.0.160 -p 5959  -n 1
机器IP 192.168.0.124
./seata-server.sh -h 192.168.0.124 -p 5959  -n 2

在这里插入图片描述

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

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

相关文章

SQL Server基础 第六章 聚合函数和分组查询

前言 在数据查询的很多场合&#xff0c;除了需要显示数据表的原始数据&#xff0c;还需要对这些数据进行分析、汇总以及求极值等&#xff0c; 如获取公司员工的人数、工资总额、最高工资、最低工资和平均工资等。本章我们将通过学习SQL Server 聚合函数轻松获取上述数据。另外&…

基于Java+SpringBoot+vue学生学习平台详细设计实现

基于JavaSpringBootvue学生学习平台详细设计实现 博主介绍&#xff1a;5年java开发经验&#xff0c;专注Java开发、定制、远程、指导等,csdn特邀作者、专注于Java技术领域 作者主页 超级帅帅吴 Java项目精品实战案例《500套》 欢迎点赞 收藏 ⭐留言 文末获取源码联系方式 文章目…

软件架构的演进(超详细)

文章目录 前言1、什么是单体架构2、分布式架构3、SOA架构4、微服务架构总结 前言 之前对各种架构一直有所了解&#xff0c;但也只是了解&#xff0c;没有过多的研究为什么架构在慢慢演进&#xff0c;新架构代替老架构的理由是什么&#xff0c;而刚好最近学习了一下架构的演进过…

人工智能会取代人工翻译吗?

当今社会正处于语言和技术高速发展的阶段&#xff0c;因此语言和技术的碰撞是不可避免的——甚至有些人说这种碰撞已经发生了&#xff0c;我们只是在等待尘埃落定。数字化、物联网、人工智能和机器学习&#xff0c;以及更进一步——智能手机、语音识别&#xff0c;以及互联网和…

27《Protein Actions Principles and Modeling》-《蛋白质作用原理和建模》中文分享

​《Protein Actions Principles and Modeling》-《蛋白质作用原理和建模》 本人能力有限&#xff0c;如果错误欢迎批评指正。 第六章&#xff1a;The principles of protein folding kinetics &#xff08;蛋白质折叠动力学的原理&#xff09; 整个二级结构通常作为一个单…

JS规范及常见问题

数字和字符串不能混合使用。 做加减法可能出错 "1"1 "11"做判断可能出错 "2"<"11"false几种for循环的使用: for(var i0;i<list.length;i): es5,需要拿到下标时、遍历非标准数组如FileList时for(var i in obj): es5,遍历对象时…

SpringBoot接口传递自定义参数,参数解析器

Hi I’m Shendi SpringBoot接口传递自定义参数&#xff0c;参数解析器 简介 我的需求&#xff1a;编写了一个日志微服务&#xff0c;使用方式是 创建日志对象 - 日志流程 - 完成日志对象&#xff0c;这样的方式使用时就需要在每个接口都去创建和完成一下&#xff0c;多出了一点…

查看 AndroidManifest.xml 文件内容,解决全是二进制代码问题

想查看打包后apk的AndroidManifest.xml文件内容&#xff0c;之前都是将后缀apk改为zip&#xff0c;直接解压查看&#xff0c;有时会遇到都是二进制代码&#xff0c;给出集中查看明文的方法&#xff1a; 方法一、通过android studio自带的Analyze apk 功能 通过 studio Build …

9.7 字符串的指针和指向字符串的指针变量

9.7 字符串的指针和指向字符串的指针变量 一.字符串表示形式二.字符串指针做函数参数1.数组名做函数参数2.数组指针做函数参数 三.字符指针变量与字符数组&#xff08;1&#xff09;字符数组是由若干个元素组成&#xff0c;每个元素中存放一个字符。&#xff08;2&#xff09;赋…

优化配置Little Snitch for Mac的规则和设置

Little Snitch for Mac是一款专业的macOS防火墙软件&#xff0c;它可以帮助你控制应用程序是否访问网络或者磁盘&#xff0c;并对系统不可信的进程和信息进行监控。如果你想保护你的Mac的网络安全&#xff0c;那么你需要了解如何配置和优化Little Snitch for Mac的规则和设置。…

证件照换底色,快试试这3种方法,方便还快捷

由于我们不论是在生活还是学习中&#xff0c;有时候总会要上传一些证件照&#xff0c;而当你手上有证件照准备上传时&#xff0c;发现底色不对&#xff0c;是不是很抓狂&#xff0c;电子证件照片换底色怎么弄&#xff1f;很多小伙伴还在因为证件照底色不对而重新拍&#xff1f;…

PureComponent和React.memo()区别

文章目录 前言一、区别二、用法 前言 本篇文章主要讲解了&#xff0c;PureComponent和React.memo()区别及用法。 一、区别 PureComponent 和 React.memo() 都是 React 中优化组件性能的方式。 PureComponent 是一个类组件&#xff0c;而 React.memo() 是一个高阶函数。 Reac…

什么蓝牙耳机适合学生党?学生党蓝牙耳机性价比排行

现如今&#xff0c;市场上有各种各样的品牌和蓝牙耳机&#xff0c;让人在选择时不免眼花缭乱。作为学生党&#xff0c;在选择一样东西的时候&#xff0c;性价比无疑会成为其选择的重要参考因素。下面&#xff0c;我来给大家分享几款适合学生党的高性价比蓝牙耳机&#xff0c;一…

SpringBoot拦截器的使用

Hi I’m Shendi SpringBoot拦截器的使用 简介 最近要实现一个全局对象的传递&#xff0c;在接口中直接通过增加函数参数来直接使用的这种方式 之前一直使用的是过滤器&#xff0c;但这种需求过滤器是没有办法实现的&#xff0c;过滤器可以给请求注入字符串&#xff0c;但不能…

【Spring】Spring的数据库开发

目录 1.Spring JDBC1.1 Spring JdbcTemplate的解析1.2 Spring JDBC的配置 2 Spring JdbcTemplate的常用方法2.1 execute()——执行SQL语句2.2 update()——更新数据2.3 query()——查询数据 1.Spring JDBC 1.1 Spring JdbcTemplate的解析 针对数据库的操作&#xff0c;Spring…

FreeRTOS - 二值信号量

一.信号量定义 信号量&#xff08;semaphore&#xff09;&#xff0c;多任务环境下使用的一种设施&#xff0c;负责协调多个任务&#xff0c;以保证任务能够正确&#xff0c;合理的使用公共资源。 二.二值信号量应用函数 函数原型#include “FreeRTOS.h”#include “semphr.h”…

我国纯电动汽车行业开始从“政策导向”向“消费导向”转变 未来机遇挑战并存

1、纯电动汽车概念及其优缺点情况 新能源汽车以能源供给方式主要可以分为纯电动汽车、混合动力汽车以及燃料电池汽车。其中&#xff0c;纯电动汽车则是指完全由可充电电池&#xff08;如铅酸电池、镍镉电池、镍氢电池或锂离子电池&#xff09;提供动力源&#xff0c;用电机驱动…

华纳云:Pycharm无法正常安装第三方库怎么解决?

这篇文章主要介绍“Pycharm无法正常安装第三方库怎么解决”的相关知识&#xff0c;小编通过实际案例向大家展示操作过程&#xff0c;操作方法简单快捷&#xff0c;实用性强&#xff0c;希望这篇“Pycharm无法正常安装第三方库怎么解决”文章能帮助大家解决问题。 1.首先检查自…

MongoDB常用语句(CURD)

文章目录 一、数据库操作二、集合操作三、文档操作3.1 插入文档3.2 查询文档3.3 更新文档3.4 删除文档 四、安全认证4.1 创建管理员账号4.2 创建应用数据库用户4.3 启动和连接 (校验方式) 提示&#xff1a;以下是本篇文章正文内容&#xff0c;MongoDB 系列学习将会持续更新 一…

【达摩院OpenVI】视频目标渐进式Transformer跟踪器ProContEXT

论文&代码 论文链接&#xff1a;[arxiv]代码&应用&#xff1a; 开源代码&#xff1a;[github code]开源应用&#xff1a;[modelscope] 背景介绍 视频目标跟踪&#xff08;Video Object Tracking, VOT&#xff09;任务以一段视频和第一帧中待跟踪目标的位置信息&…