刘耀文

刘耀文

java开发者
github

seataのデプロイ

docker-compose db nacos モード#

データベーステーブルの準備#

データベーステーブル: https://github.com/apache/incubator-seata/tree/develop/script/server/db

compose.yaml ファイルの準備#

version: "3.1"
services:
  seata-server:
    image: seataio/seata-server:1.5.2
    ports:
      - "7091:7091"
      - "8091:8091"
    environment:
      - STORE_MODE=db
      # SEATA_IPをホストとしてseataサーバーに登録
      - SEATA_IP=192.168.208.128
      - SEATA_PORT=8091
    volumes:
      - "/usr/share/zoneinfo/Asia/Shanghai:/etc/localtime"        # システムタイムゾーンを設定
      - "/usr/share/zoneinfo/Asia/Shanghai:/etc/timezone"  # タイムゾーンを設定
      # docker cpコマンドでリソースファイルを相対パス`./seata-server/resources`にコピーしたと仮定
      # docker cp コンテナid:/seata-server/resources ./resource このステップは省略できません
      # 問題がある場合は、上記の[注意事項]および[カスタム設定ファイルの使用]をお読みください
      - "./resources:/seata-server/resources"
    networks:
    # 外部dbデータベースネットワーク、mysqlコンテナを先に起動する必要があります。別に配置するか、ここにまとめて配置することができます
      - hm-net
          
networks:
  hm-net:
    external: true # 外部から

application.yaml ファイルの準備#

https://github.com/apache/incubator-seata/blob/develop/server/src/main/resources/application.example.yml

application の例
注意:/seata-server/resources をコピーした後、内部の application を置き換える必要があります

server:
  port: 7091

spring:
  application:
    name: seata-server
    
console:
  user:
    username: liuyaowen
    password: 123123

logging:
  config: classpath:logback-spring.xml
  file:
    path: ${log.home:${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

seata:
  config:
    # サポート: nacos 、 consul 、 apollo 、 zk  、 etcd3
    type: nacos
    nacos:
      server-addr: 192.168.208.128:8848
      namespace: 9194952e-02a9-4737-89c2-1f3dee3317f0
      group: SEATA_GROUP
      username:
      password:
      context-path:
      ## MSE Nacosを認証付きで使用する場合、username/password属性とミューテックス
      #access-key:
      #secret-key:
      data-id: seataServer.properties
  registry:
    # サポート: nacos 、 eureka 、 redis 、 zk  、 consul 、 etcd3 、 sofa
    type: nacos
    preferred-networks: 30.240.*
    nacos:
      application: seata-server
      server-addr: 192.168.208.128:8848
      group: SEATA_GROUP
      namespace: 9194952e-02a9-4737-89c2-1f3dee3317f0
      cluster: default
      username:
      password:
      context-path:
      ## MSE Nacosを認証付きで使用する場合、username/password属性とミューテックス
      #access-key:
      #secret-key:
  security:
    secretKey: SeataSecretKey0c382ef121d778043159209298fd40bf3850a017
    tokenValidityInMilliseconds: 1800000
    ignore:
      urls: /,/**/*.css,/**/*.js,/**/*.html,/**/*.map,/**/*.svg,/**/*.png,/**/*.ico,/console-fe/public/**,/api/v1/auth/login

  metrics:
    enabled: false
    registry-type: compact
    exporter-list: prometheus
    exporter-prometheus-port: 9898
  transport:
    rpc-tc-request-timeout: 15000
    enable-tc-server-batch-send-response: false
    shutdown:
      wait: 3
    thread-factory:
      boss-thread-prefix: NettyBoss
      worker-thread-prefix: NettyServerNIOWorker
      boss-thread-size: 1

その後、nacos で seata の設定を適切に構成する必要があります
nacos の設定例

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://xxxx:xxxx/{データベース内のseataのテーブル名}?useUnicode=true&characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useSSL=false
store.db.user=root
store.db.password=mysql_lyw
# データベースの初期接続数
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
store.db.distributedLockTable=distributed_lock
# グローバルトランザクションを一度に最大で取得する件数 デフォルト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

console.user.username=liuyaowen
console.user.password=123123

サービスの起動#


docker-compose -f docker-compose.yaml up

ファイル構成#

├── docker-compose.yaml
├── resources
│   ├── application.yaml
│   ├── banner.txt
│   ├── io
│   ├── logback
│   ├── logback-spring.xml
│   ├── lua
│   ├── META-INF
│   ├── README.md
│   ├── README-zh.md

簡単な使用法#

ID の導入#

もちろん、discovery,springcloud,springcloudAlibabaは事前に準備する必要があります
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-seata</artifactId>
</dependency>

設定#

seata:
    registry:
        type: nacos
        nacos:
            application: seata-server
            server-addr: 192.168.208.128:8848
            group: SEATA_GROUP
            namespace: 9194952e-02a9-4737-89c2-1f3dee3317f0
            username:
            password:
    tx-service-group: hmall
    service: 
        vgroup-mapping:
        <!-- 対応するトランザクショングループのクラスター位置 -->
            hmall: "default"

AT モード#

-- 注意:ここで0.7.0+にフィールドcontextが追加されました
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,
  PRIMARY KEY (`id`),
  UNIQUE KEY `ux_undo_log` (`xid`,`branch_id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;

この記事は Mix Space によって xLog に同期更新されました
元のリンクは https://me.liuyaowen.club/posts/default/20240816and4


読み込み中...
文章は、創作者によって署名され、ブロックチェーンに安全に保存されています。