首页 > 其他分享 >seata 使用笔记

seata 使用笔记

时间:2023-01-06 19:25:20浏览次数:40  
标签:seata DEFAULT db 笔记 server 使用 NULL id

版本如下:

seata-server 1.6.1
spring-cloud-alibaba.version 2021.0.1.0
mysql-connector-java 8.0.21
druid-spring-boot-starter 1.2.8
dynamic-datasource-spring-boot-starter 3.5.0
mybatis-plus-boot-starter 3.5.1
java.version 11

seata-server

提取配置

docker run --rm --name seata-server -d -p 8091:8091 seataio/seata-server:1.6.1
#在宿主机对应路径下创建conf文件夹,放置导出的配置文件
docker cp [容器id]:/seata-server/resources/* /usr/app/seata-server/conf
#复制完即可stop停止容器,自动删除掉

修改resources/application.yml

#  Copyright 1999-2019 Seata.io Group.
#
#  Licensed under the Apache License, Version 2.0 (the "License");
#  you may not use this file except in compliance with the License.
#  You may obtain a copy of the License at
#
#  http://www.apache.org/licenses/LICENSE-2.0
#
#  Unless required by applicable law or agreed to in writing, software
#  distributed under the License is distributed on an "AS IS" BASIS,
#  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
#  See the License for the specific language governing permissions and
#  limitations under the License.

server:
  port: 7091

spring:
  application:
    name: seata-server

logging:
  config: classpath:logback-spring.xml
  file:
    path: ${user.home}/logs/seata
  # extend:
  #   logstash-appender:
  #     destination: 127.0.0.1:4560
  #   kafka-appender:
  #     bootstrap-servers: 127.0.0.1:9092
  #     topic: logback_to_logstash

console:
  user:
    username: seata
    password: seata

seata:
  config:
    # support: nacos, consul, apollo, zk, etcd3
    type: nacos
    nacos:
      server-addr: nacos服务器地址
      namespace: seata
      group: SEATA_GROUP
      data-id: seataServer.properties
  registry:
    # support: nacos, eureka, redis, zk, consul, etcd3, sofa
    type: nacos
    nacos:
      application: seata-server
      server-addr: nacos服务器地址
      group: SEATA_GROUP
      namespace: seata
      # tc集群名称
      cluster: default
#  server:
#    service-port: 8091 #If not configured, the default is '${server.port} + 1000'
  security:
    secretKey: SeataSecretKey0c382ef121d778043159209298fd40bf3850a017
    tokenValidityInMilliseconds: 1800000
    ignore:
      urls: /,/**/*.css,/**/*.js,/**/*.html,/**/*.map,/**/*.svg,/**/*.png,/**/*.ico,/console-fe/public/**,/api/v1/auth/login

nacos创建配置

seataServer.properties

store.mode=db
#-----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.cj.jdbc.Driver
store.db.url=jdbc:mysql://mysql地址:3306/party-go?useUnicode=true&characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useSSL=false
store.db.user=root
store.db.password=root密码
# 数据库初始连接数
store.db.minConn=1
# 数据库最大连接数
store.db.maxConn=20
# 获取连接时最大等待时间 默认5000,单位毫秒
store.db.maxWait=5000
# 全局事务表名 默认global_table
store.db.globalTable=global_table
# 分支事务表名 默认branch_table
store.db.branchTable=branch_table
# 全局锁表名 默认lock_table
store.db.lockTable=lock_table
# 查询全局事务一次的最大条数 默认100
store.db.queryLimit=100


# undo保留天数 默认7天,log_status=1(附录3)和未正常清理的undo
server.undo.logSaveDays=7
# undo清理线程间隔时间 默认86400000,单位毫秒
server.undo.logDeletePeriod=86400000
# 二阶段提交重试超时时长 单位ms,s,m,h,d,对应毫秒,秒,分,小时,天,默认毫秒。默认值-1表示无限重试
# 公式: timeout>=now-globalTransactionBeginTime,true表示超时则不再重试
# 注: 达到超时时间后将不会做任何重试,有数据不一致风险,除非业务自行可校准数据,否者慎用
server.maxCommitRetryTimeout=-1
# 二阶段回滚重试超时时长
server.maxRollbackRetryTimeout=-1
# 二阶段提交未完成状态全局事务重试提交线程间隔时间 默认1000,单位毫秒
server.recovery.committingRetryPeriod=1000
# 二阶段异步提交状态重试提交线程间隔时间 默认1000,单位毫秒
server.recovery.asynCommittingRetryPeriod=1000
# 二阶段回滚状态重试回滚线程间隔时间  默认1000,单位毫秒
server.recovery.rollbackingRetryPeriod=1000
# 超时状态检测重试线程间隔时间 默认1000,单位毫秒,检测出超时将全局事务置入回滚会话管理器
server.recovery.timeoutRetryPeriod=1000

service.vgroupMapping.party-tx-group

default

创建mysql表

CREATE TABLE `distributed_lock` (
  `lock_key` char(20) NOT NULL,
  `lock_value` varchar(20) NOT NULL,
  `expire` bigint(20) DEFAULT NULL,
  PRIMARY KEY (`lock_key`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='分布式事务表';

CREATE TABLE `global_table` (
  `xid` varchar(128) NOT NULL,
  `transaction_id` bigint(20) DEFAULT NULL,
  `status` tinyint(4) NOT NULL,
  `application_id` varchar(32) DEFAULT NULL,
  `transaction_service_group` varchar(32) DEFAULT NULL,
  `transaction_name` varchar(128) DEFAULT NULL,
  `timeout` int(11) DEFAULT NULL,
  `begin_time` bigint(20) DEFAULT NULL,
  `application_data` varchar(2000) DEFAULT NULL,
  `gmt_create` datetime DEFAULT NULL,
  `gmt_modified` datetime DEFAULT NULL,
  PRIMARY KEY (`xid`),
  KEY `idx_status_gmt_modified` (`status`,`gmt_modified`),
  KEY `idx_transaction_id` (`transaction_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='分布式事务表';

CREATE TABLE `lock_table` (
  `row_key` varchar(128) NOT NULL,
  `xid` varchar(128) DEFAULT NULL,
  `transaction_id` bigint(20) DEFAULT NULL,
  `branch_id` bigint(20) NOT NULL,
  `resource_id` varchar(256) DEFAULT NULL,
  `table_name` varchar(32) DEFAULT NULL,
  `pk` varchar(36) DEFAULT NULL,
  `status` tinyint(4) NOT NULL DEFAULT '0' COMMENT '0:locked ,1:rollbacking',
  `gmt_create` datetime DEFAULT NULL,
  `gmt_modified` datetime DEFAULT NULL,
  PRIMARY KEY (`row_key`),
  KEY `idx_status` (`status`),
  KEY `idx_branch_id` (`branch_id`),
  KEY `idx_xid` (`xid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='分布式事务表';

CREATE TABLE `undo_log` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `branch_id` bigint(20) NOT NULL,
  `xid` varchar(100) NOT NULL,
  `context` varchar(128) NOT NULL,
  `rollback_info` longblob NOT NULL,
  `log_status` int(11) NOT NULL,
  `log_created` datetime NOT NULL,
  `log_modified` datetime NOT NULL,
  `ext` varchar(100) DEFAULT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `ux_undo_log` (`xid`,`branch_id`)
) ENGINE=InnoDB AUTO_INCREMENT=21 DEFAULT CHARSET=utf8 COMMENT='分布式事务日志';

 

docker-compose.yml

version: "3.1"
services:
  seata-server-1:
    image: seataio/seata-server:1.6.1
    ports:
      - "7091:7091"
      - "8091:8091"
    environment:
      - STORE_MODE=db
      # 以SEATA_IP作为host注册seata server
      - SEATA_IP=192.168.0.113
      - SEATA_PORT=8091
    volumes:
      - "/usr/share/zoneinfo/Asia/Shanghai:/etc/localtime"        #设置系统时区
      - "/usr/share/zoneinfo/Asia/Shanghai:/etc/timezone"  #设置时区
      # 假设我们通过docker cp命令把资源文件拷贝到相对路径`./seata-server/resources`中
      # 如有问题,请阅读上面的[注意事项]以及[使用自定义配置文件]
      - "./seata-server/resources:/seata-server/resources"

  # seata-server-2:
  #   image: seataio/seata-server:1.6.1
  #   ports:
  #     - "7092:7091"
  #     - "8092:8091"
  #   environment:
  #     - STORE_MODE=db
  #     # 以SEATA_IP作为host注册seata server
  #     - SEATA_IP=192.168.0.113
  #     - SEATA_PORT=8092
  #   volumes:
  #     - "/usr/share/zoneinfo/Asia/Shanghai:/etc/localtime"        #设置系统时区
  #     - "/usr/share/zoneinfo/Asia/Shanghai:/etc/timezone"  #设置时区
  #     # 假设我们通过docker cp命令把资源文件拷贝到相对路径`./seata-server/resources`中
  #     # 如有问题,请阅读上面的[注意事项]以及[使用自定义配置文件]
  #     - "./seata-server/resources:/seata-server/resources"

  # seata服务3......seata服务N

客户都安使用

引入pom依赖

<dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-seata</artifactId>
            <exclusions>
                <exclusion>
                    <artifactId>druid</artifactId>
                    <groupId>com.alibaba</groupId>
                </exclusion>
            </exclusions>
        </dependency>
<!--数据库驱动及连接池-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.21</version>
        </dependency>
        <!-- Druid -->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid-spring-boot-starter</artifactId>
            <version>1.2.8</version>
        </dependency>
        <!-- Dynamic DataSource -->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>dynamic-datasource-spring-boot-starter</artifactId>
            <version>3.5.0</version>
        </dependency>
<dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.5.1</version>
        </dependency>

客户端配置

spring:
  datasource:
    druid:
      stat-view-servlet:
        enabled: false
        loginUsername: admin
        loginPassword: 1111111
    dynamic:
      primary: master #设置默认的数据源或者数据源组,默认值即为master
      strict: false #严格匹配数据源,默认false. true未匹配到指定数据源时抛异常,false使用默认数据源
      druid:
        initial-size: 5
        min-idle: 5
        maxActive: 20
        maxWait: 60000
        timeBetweenEvictionRunsMillis: 60000
        minEvictableIdleTimeMillis: 300000
        validationQuery: SELECT 1 FROM DUAL
        testWhileIdle: true
        testOnBorrow: false
        testOnReturn: false
        poolPreparedStatements: true
        maxPoolPreparedStatementPerConnectionSize: 20
        filters: stat,slf4j
        connectionProperties: druid.stat.mergeSql\=true;druid.stat.slowSqlMillis\=5000
      datasource:
        # 主库数据源
        master:
          driver-class-name: com.mysql.cj.jdbc.Driver
          url: jdbc:mysql://mysql地址:3306/party-go?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
          username: root
          password: root密码
          seata: true # 开启分布式事务代理
          # 从库数据源
          # slave:
          # username:
          # password:
          # url:
          # driver-class-name:
      seata: true    # 开启seata代理,开启后默认每个数据源都代理,如果某个不需要代理可单独关闭
seata:
  application-id: ${spring.application.name}
  # 事务分组名
  tx-service-group: party-tx-group
  # 事务分组映射
  service:
    vgroupMapping:
      party-tx-group: "default"
  enable-auto-data-source-proxy: false
  config:
    type: nacos
    nacos:
      server-addr: nacos地址
      namespace: seata
      group: SEATA_GROUP
      dataId: "seataServer.properties"
  registry:
    type: nacos
    nacos:
      application: seata-server
      server-addr: nacos地址
      group: SEATA_GROUP
      namespace: seata

 

标签:seata,DEFAULT,db,笔记,server,使用,NULL,id
From: https://www.cnblogs.com/qianxiaoPro/p/17031398.html

相关文章

  • [概率论与数理统计]笔记:2.3 常用的离散型分布
    2.3常用的离散型分布退化分布若随机变量\(X\)满足\[P\{X=a\}=1\]则称\(X\)服从\(a\)处的退化分布,这种情况下,随机变量退化成了一个确定的常数。两点分布定义若随机......
  • 使用python程序自动克隆Azure DevOps Server中的Git库(令牌pat认证)
    Contents1.场景描述2.操作方法2.1调用AzureDevOps的接口生成令牌2.2生成Base64编码格式的认证字符2.3在git命令行中使用base64字符作为认证字符1.场景描述在最近的......
  • IDEA 中使用 Debug 教程
      字段断点如果你阅读源码,你一定会有个困扰,类中的某个字段的值到底是在哪里改变的,你要一点点追踪调用栈,逐步排查,稍不留神,就可能有遗漏我们可以在IntelliJIDEA中......
  • m在VBLAST协作MIMO系统分部使用LDPC,Turbo,卷积三种信道编译码进行误码率matlab仿真
    1.算法描述从上面的结构可知,整个卷积编码的结构可由CRC校验,卷积编码,打孔组成,其中打孔的作用就是讲卷积编码后的码率变为所需要的码率进行发送。这里,我们采用如下的数据帧......
  • 使用 GPG 签名提交
    GPG签名是对代码提交者进行身份验证的一种补充,即证明代码提交来密钥持有者,理论上可以确保在目前的破译技术水平下无法篡改内容。您可以使用GPG工具(GNUPrivacyGuard)......
  • Ubutnu 20.04 安装和使用单机版hadoop 3.2 [转载]
    按照此文档操作,可以一次部署成功:Ubutnu20.04安装和使用单机版hadoop3.2部署之后,提交测试任务报资源问题。原因是yarn还需要配置,如下:$catyarn-site.xml<?xml......
  • Redis使用zset集合根据分值实现分页功能
    自己去看代码吧@ComponentpublicclassQueryPage{@AutowiredprivateStringRedisTemplatestringRedisTemplate;privatefinalStringKEY="query:sh......
  • Java中的StringUtils引入及使用
    pom.xml中引入依赖<!--https://mvnrepository.com/artifact/org.apache.commons/commons-lang3--><dependency><groupId>org.apache.commons</groupId><artifactId>......
  • 前端导出pdf,多个元素一起使用
    需求:最近有个需求,需要导出一份报告文档,有封面页和内容页,封面页内容不多,需要作为pdf单独的一页,内容页的内容很丰富,一页展示不完,那就需要分页展示。思路:我的实现方法是封面......
  • 基于SpringBoot 使用 Flink 收发Kafka消息
    前言这周学习下Flink相关的知识,学习到一个读写Kafka消息的示例,自己动手实践了一下,别人示例使用的是普通的JavaMain方法,没有用到springboot.我们在实际工作中会使用spr......