TCC とは何ですか? TCC は Try、confirm、および Cancel の略語で、2007 年に発行された「分散トランザクションを超えた生活: 背教者の意見」というタイトルの論文でパット ヘランドによって最初に提案されました。
TCC は 3 つのフェーズに分かれています
TCC 分散トランザクションには、従来の XA 分散トランザクションと同じ 3 つの役割があります。
銀行間送金と同様の業務を行う場合、送金 (TransOut) と送金 (TransIn) は異なります。 TCC トランザクションの一般的なシーケンス図は次のとおりです。
$vega->handleFunc('/api/TransOutTry', function (Mix\Vega\Context $ctx) { var_dump('TransOutTry', $ctx->request->getQueryParams(), $ctx->request->getParsedBody()); $ctx->JSON(200, ['result' => 'SUCCESS']);})->methods('POST');$vega->handleFunc('/api/TransOutConfirm', function (Mix\Vega\Context $ctx) { var_dump('TransOutConfirm', $ctx->request->getQueryParams(), $ctx->request->getParsedBody()); $ctx->JSON(200, ['result' => 'SUCCESS']);})->methods('POST');$vega->handleFunc('/api/TransOutCancel', function (Mix\Vega\Context $ctx) { var_dump('TransOutCancel', $ctx->request->getQueryParams(), $ctx->request->getParsedBody()); $ctx->JSON(200, ['result' => 'SUCCESS']);})->methods('POST');$vega->handleFunc('/api/TransInTry', function (Mix\Vega\Context $ctx) { var_dump('TransInTry', $ctx->request->getQueryParams(), $ctx->request->getParsedBody()); $ctx->JSON(200, ['result' => 'SUCCESS']);})->methods('POST');$vega->handleFunc('/api/TransInConfirm', function (Mix\Vega\Context $ctx) { var_dump('TransInConfirm', $ctx->request->getQueryParams(), $ctx->request->getParsedBody()); $ctx->JSON(200, ['result' => 'SUCCESS']);})->methods('POST');$vega->handleFunc('/api/TransInCancel', function (Mix\Vega\Context $ctx) { var_dump('TransInCancel', $ctx->request->getQueryParams(), $ctx->request->getParsedBody()); $ctx->JSON(200, ['result' => 'SUCCESS']);})->methods('POST');
Dtmcli\tccGlobalTransaction($dtm, function ($tcc) use ($svc) { /** @var Dtmcli\Tcc $tcc */ $req = ['amount' => 30]; $tcc->callBranch($req, $svc . '/TransOutTry', $svc . '/TransOutConfirm', $svc . '/TransOutCancel'); $tcc->callBranch($req, $svc . '/TransInTry', $svc . '/TransInConfirm', $svc . '/TransInCancel'); });
# 部署启动dtm# 需要docker版本18以上git clone https://github.com/yedf/dtmcd dtm docker-compose up# 另起一个命令行https://github.com/yedf/dtmcli-php-sample.gitcd dtmcli-php-sample composer installphp demo.php start
$vega->handleFunc('/api/TransInTry', function (Mix\Vega\Context $ctx) { var_dump('TransInTry', $ctx->request->getQueryParams(), $ctx->request->getParsedBody()); $ctx->JSON(200, ['result' => 'FAILURE']);})->methods('POST');
分散トランザクションのための 7 つの最も古典的なソリューション 」を参照してください。
この記事で使用されている例は、yedf / からの抜粋です。 dtm (https://github.com/yedf/dtm) は、複数のトランザクション モード (TCC、SAGA、XA、トランザクション メッセージの言語間サポート) をサポートし、golang、python、Java、PHP を使用して分散トランザクション TCC を完了する方法を段階的に説明します。 を使用して分散トランザクション TCC を完了する方法を段階的に説明します。、nodejs などの顧客をサポートしています。その他の言語のターミナルについては、各言語の SDK (https://dtm.pub/summary/code.html#go) を参照してください。冪等性、一時停止、ヌル補償などの問題をエレガントに解決するサブトランザクション バリア機能を提供します。 この記事を読んだ後は、github.com/yedf/dtm プロジェクトにアクセスして、スターを付けてサポートしてください。以上がPHP を使用して分散トランザクション TCC を完了する方法を段階的に説明します。の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。