これに先立ち、1日かけてやってみました。Seataは使い方が簡単で超シンプルですが、インストールや設定が本当に面倒で、いろいろな落とし穴に遭遇しました。本題に入りましょう。オ(╥﹏╥)オ 1. バージョン注意:バージョンが一致しないと、さまざまなエラーが発生します。公式サイトに従ってバージョンを合わせることができます。 シータ:1.3.0 alibaba.cloud:2.2.3.リリース ナコス:2.0.2 2. Dockerのインストールとseataサーバーの構築2.1 seataイメージをダウンロードする docker pull seataio/seata-server:1.3.0 2.2 Linux ディレクトリに registry.conf を作成します。私のパスは /data/seate/registry.conf です。以降のすべての作成はこのディレクトリにあります。 cd /データ mkdir シート vim レジストリ.conf 2.3 registry.confの内容は次のとおりです。 レジストリ { タイプ = "ナコス" ナコス アプリケーション = "seata-server" サーバーアドレス = "127.0.0.1:8848" グループ = "SEATA_GROUP" 名前空間 = "" クラスター = "デフォルト" ユーザー名 = "" パスワード = "" } } 設定{ タイプ = "ナコス" ナコス サーバーアドレス = "127.0.0.1:8848" 名前空間 = "" グループ = "SEATA_GROUP" ユーザー名 = "" パスワード = "" } } レジストリと設定は同じグループにある必要があることに注意してください。登録センターとして nacos を使用します。nacos のアドレスを変更する必要があることに注意してください。 ----->>>ここで文を追加したいと思います。新しいデータベース seata と 3 つの新しいテーブルを作成する必要があります。 -- -------------------------------- storeMode が 'db' の場合に使用されるスクリプト -------------------------------- -- GlobalSessionデータを保存するテーブル 存在しない場合はテーブルを作成 `global_table` ( `xid` VARCHAR(128) NOT NULL、 `transaction_id` BIGINT、 `status` TINYINT NOT NULL、 `アプリケーションID` VARCHAR(32)、 `transaction_service_group` VARCHAR(32)、 `トランザクション名` VARCHAR(128)、 `タイムアウト` INT, `begin_time` BIGINT、 `application_data` VARCHAR(2000)、 `gmt_create` 日付時刻、 `gmt_modified` 日付時刻、 主キー (`xid`)、 キー `idx_gmt_modified_status` (`gmt_modified`, `status`), キー `idx_transaction_id` (`transaction_id`) ) エンジン = InnoDB デフォルト文字セット = utf8; -- BranchSessionデータを保存するテーブル `branch_table` が存在しない場合はテーブルを作成します ( `branch_id` BIGINT NOT NULL、 `xid` VARCHAR(128) NOT NULL、 `transaction_id` BIGINT、 `リソースグループID` VARCHAR(32)、 `resource_id` VARCHAR(256)、 `branch_type` VARCHAR(8)、 `ステータス` TINYINT、 `client_id` VARCHAR(64)、 `application_data` VARCHAR(2000)、 `gmt_create` 日付時刻(6)、 `gmt_modified` 日付時刻(6)、 主キー (`branch_id`)、 キー `idx_xid` (`xid`) ) エンジン = InnoDB デフォルト文字セット = utf8; -- ロックデータを保存するテーブル 存在しない場合はテーブルを作成する `lock_table` ( `row_key` VARCHAR(128) NOT NULL、 `xid` VARCHAR(96)、 `transaction_id` BIGINT、 `branch_id` BIGINT NOT NULL、 `resource_id` VARCHAR(256)、 `テーブル名` VARCHAR(32)、 `pk` VARCHAR(36)、 `gmt_create` 日付時刻、 `gmt_modified` 日付時刻、 主キー (`row_key`)、 キー `idx_branch_id` (`branch_id`) ) エンジン = InnoDB デフォルト文字セット = utf8; 分散ビジネス データベースを実装するには、各データベースに undo_log テーブルを追加する必要があります。そうしないと、エラーが報告されます。 テーブル `undo_log` を作成します ( `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主キー', `branch_id` bigint(20) NOT NULL COMMENT 'ブランチトランザクションID', `xid` varchar(100) NOT NULL COMMENT 'グローバルトランザクションID', `context` varchar(128) NOT NULL COMMENT 'undo_logコンテキスト、シリアル化など', `rollback_info` longblob NOT NULL COMMENT 'ロールバック情報', `log_status` int(11) NOT NULL COMMENT '0:通常状態、1:防御状態', `log_created` datetime(6) NOT NULL COMMENT 'create datetime', `log_modified` datetime(6) NOT NULL COMMENT 'modify datetime', 主キー (`id`)、 ユニークキー `ux_undo_log` (`xid`,`branch_id`) ) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=utf8 COMMENT='AT トランザクション モード UNDO テーブル'; 2.4 プッシュ設定ファイル vim config.txt を作成し、ファイル内の設定を nacos にプッシュします。 vim config.txt service.vgroupMapping.btb_tx_group=デフォルト ストアモード=db store.db.datasource=ドルイド ストア.db.dbType=mysql store.db.driverClassName=com.mysql.cj.jdbc.Driver store.db.url=jdbc:mysql://172.0.0.1:3306/seata?useUnicode=true store.db.user=ルート store.db.password=ルート ストア.db.minConn=5 ストア.db.maxConn=30 store.db.globalTable=グローバルテーブル store.db.branchTable=ブランチテーブル ストア.db.クエリ制限=100 store.db.lockTable=ロックテーブル ストア.db.maxWait=5000 btb_tx_group はクライアントと一貫性がある必要があることに注意してください。ちなみに、データベース ドライバーに注意してください。8 以上の場合は、私のドライバーを使用してください。5.7 の場合は、com.mysql.jdbc.Driver を使用してください。 2.5 プッシュスクリプトを作成します。実行スクリプトはconfig.txtの次のレイヤーに配置する必要があるため、ディレクトリを追加します。 mkdir sh cd sh vim nacos-config.sh 内容は以下のとおりです。変更は行わない方がよいでしょう #!/usr/bin/env バッシュ # 著作権 1999-2019 Seata.io グループ。 # # Apache License バージョン 2.0 (以下「ライセンス」) に基づいてライセンス供与されます。 # ライセンスに従わない限り、このファイルを使用することはできません。 # ライセンスのコピーは以下から入手できます。 # # http://www.apache.org/licenses/LICENSE-2.0 # # 適用法で義務付けられている場合、または書面で同意されている場合を除き、ソフトウェア # ライセンスに基づいて配布されるものは「現状有姿」で配布されます。 # 明示的または黙示的を問わず、いかなる種類の保証または条件もありません。 # 権限と使用許諾を規定する具体的な言語についてはライセンスを参照してください。 # ライセンスに基づく制限。 getopts ":h:p:g:t:u:w:" が opt されるとき する ケース$opt in h) ホスト=$OPTARG ;; p) ポート=$OPTARG ;; グ) グループ=$OPTARG ;; t) テナント=$OPTARG ;; u) ユーザー名=$OPTARG ;; わ) パスワード=$OPTARG ;; ?) echo " 使用オプション: $0 [-h ホスト] [-p ポート] [-g グループ] [-t テナント] [-u ユーザー名] [-w パスワード] " 出口1 ;; エサック 終わり [[ -z ${host} ]]の場合 ホスト=ローカルホスト フィ [[ -z ${port} ]]の場合 ポート=8848 フィ [[ -z ${group} ]]の場合 グループ="SEATA_GROUP" フィ [[ -z ${tenant} ]]の場合 テナント="" フィ [[ -z ${username} ]];の場合 ユーザー名="" フィ [[ -z ${password} ]]の場合 パスワード="" フィ nacosAddr=$ホスト:$ポート コンテンツタイプ="コンテンツタイプ:application/json;文字セット=UTF-8" echo "nacosAddr=$nacosAddr を設定" echo "グループ=$group を設定" 失敗回数=0 tempLog=$(mktemp -u) 関数addConfig() { curl -X POST -H "${contentType}" "http://$nacosAddr/nacos/v1/cs/configs?dataId=$1&group=$group&content=$2&tenant=$tenant&username=$username&password=$password" >"${tempLog}" 2>/dev/null [[ -z $(cat "${tempLog}") ]]; の場合 echo " クラスターのステータスを確認してください。 " 出口1 フィ [[ $(cat "${tempLog}") =~ "true" ]] の場合、 echo "$1=$2 の設定に成功しました" それ以外 echo "$1=$2 の設定に失敗しました " (( 失敗回数++ )) フィ } カウント=0 $(cat $(dirname "$PWD")/config.txt | sed s/[[:space:]]//g); の行に対して (( カウント++ )) キー=${行%%=*} 値=${行番号*=} addConfig "${キー}" "${値}" 終わり エコー "= ... echo " 初期化パラメータを完了しました。合計数:$count、失敗数:$failCount " エコー "= ... [[ ${failCount} -eq 0 ]]の場合 echo " Init nacos config が完了しました。seata-server を起動してください。" それ以外 echo " init nacos config が失敗しました。 " フィ 2.6 プッシュ スクリプトを実行し、その後に nacos IP アドレスを指定します。ポートが 8848 でない場合は、-p 8884 を追加してポートを設定する必要があります。 bash nacos-config.sh -h 127.0.0.1 2.7 コンテナを作成します。SEATA_IP が Alibaba Cloud サーバーの場合は、外部ネットワーク IP アドレスを書き込む必要があることに注意してください。 docker run -d --restart always --name seata-server -p 8091:8091 -e SEATA_IP=172.0.0.1 -e SEATA_CONFIG_NAME=file:/data/seata/registry -v /data/seata:/data/seata seataio/seata-server:1.3.0 3. クライアント(つまり、プロジェクトで seata を使用するマイクロサービス)3.1 pom.xml は依存関係を導入します <!-- Seata 分散トランザクション --> <依存関係> <グループ ID>com.alibaba.cloud</グループ ID> <artifactId>spring-cloud-starter-alibaba-seata</artifactId> <除外事項> <除外> <groupId>io.seata</groupId> <artifactId>seata-spring-boot-starter</artifactId> </除外> </除外> </依存関係> <依存関係> <groupId>io.seata</groupId> <artifactId>seata-spring-boot-starter</artifactId> <バージョン>1.3.0</バージョン> </依存関係> 元の io.seata パッケージを削除する必要があり、サーバーおよびクライアントのパッケージ バージョンが一致している必要があることに注意してください。 3.2 プロジェクト構成ファイルを構成する #シータ seata.application-id=${spring.application.name} seata.tx-サービスグループ=btb_tx_group seata.config.type=ナコス seata.config.nacos.server-addr=172.0.0.1:8848 seata.config.nacos.group=SEATA_GROUP seata.registry.type=ナコス seata.registry.nacos.application=seata サーバー seata.registry.nacos.server-addr=172.0.0.1:8848 seata.registry.nacos.group=SEATA_GROUP 注: ここでの btb_tx_group は、サーバーの vgroupMapping の後のキーと一致している必要があります。 例: service.vgroupMapping.btb_tx_group=default 3.3 使用するための注釈を追加する @グローバルトランザクション 拡張:データベースを使用したところ、実行時に主キーが不足しているというエラーが報告されたため、undo_log テーブルに増分主キー ID を追加しました。上記の undo_log テーブルを作成するための SQL は ID を追加したもので、正式な SQL には ID がありません。ご留意ください! ! ! ! 質問:単一のソースにエラーがあります。 理由は、データベースであり、プロキシ構成を次のように設定する必要があるためです。 私の実際の状況によると、これは構成ファイルを参照しており、そうでない場合はエラーが報告されます。 #単一データソース seata.enable-auto-data-source-proxy=true #複数のデータソースseata.enable-auto-data-source-proxy=false Docker+nacos+seata1.3.0のインストールと使用に関する記事はこれで終了です。Docker+nacos+seataのインストールと使用に関する詳細については、123WORDPRESS.COMの以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも123WORDPRESS.COMをよろしくお願いいたします。 以下もご興味があるかもしれません:
|
<<: LinkedIn がウェブサイト閲覧を簡素化するためにリニューアル
>>: あまり多くのコードを書かずに、ハイパーリンクを使ってシンプルで美しいカスタムチェックボックスを実装できます。
MySQL v5.7.19 正式版(32/64 ビットインストール版および zip 解凍版) 1. ...
コンテナは Docker のもう一つの中心的な概念です。簡単に言えば、コンテナとは、独立して実行され...
序文MySQL の InnoDB エンジンがインデックスの保存に B+tree を使用する理由は、デ...
参考までに、Javascript を使用して広告を閉じる方法に関するケース スタディを示します。詳細...
私は最近、YouTube の CSS アニメーション効果チュートリアル シリーズをフォローしています...
目次1. 三項演算子の判定2. 動的に設定されるクラス3. 方法判定4. 配列バインディング5. e...
1. 仮想マシンの準備1. 新しい仮想マシンを作成する 2. 仮想マシンのカスタマイズを選択する 3...
MySQL のインデックスの種類には、通常のインデックス、一意のインデックス、全文インデックスがあり...
このドキュメントの目的はreact-diagramフレームワーク モデルの Json シリアル化を説...
今日は、「ローテク」の問題について書きたいと思います。ちなみに、私は JavaScript Week...
目次タイムスタンプ比較クエリで遭遇する落とし穴タイムスタンプクエリ範囲の問題タイムスタンプ比較クエリ...
目次setStateを使用する理由setStateの使用法非同期または同期更新要約するsetStat...
Q: xml と html の違いがわかりません。違いは何ですか? A: XMLと HTML の違い...
序文スロークエリとは何か、またスロークエリを最適化するにはどうすればよいか。以下では、これら 2 つ...
IE、Firefox、Chrome ブラウザでの表示効果は、...