Jadual Kandungan
Konfigurasikan middleware
Menggunakan" >Menggunakan
Mod TCC " >Mod TCC
Tiga fasa TCC " >Tiga fasa TCC
Contoh kod" >Contoh kod
Corak Saga
Pecahan sub-urus niaga Saga" >Pecahan sub-urus niaga Saga
代码示例" >代码示例
Rumah pembangunan bahagian belakang tutorial php [DTM] Versi beta klien coroutine PHP v0.1 dikeluarkan!

[DTM] Versi beta klien coroutine PHP v0.1 dikeluarkan!

Feb 15, 2022 pm 03:19 PM

Berita baik Pengurus Transaksi Teragih DTM Pelanggan coroutine PHP v0.1 versi beta dikeluarkan! ! !
→ github.com/dtm-php/dtm-client

Pengenalan

dtm/dtm-client ialah pengurus transaksi teragih DTM The PHP pelanggan telah menyokong mod transaksi teragih mod TCC, Saga, dan mod mesej dua fasa, dan telah melaksanakan komunikasi dengan Pelayan DTM masing-masing menggunakan protokol HTTP atau protokol gRPC Pelanggan boleh berjalan dengan selamat dalam coroutine PHP-FPM dan Swoole. persekitaran, ia juga menyediakan sokongan fungsi yang lebih mudah digunakan untuk Hyperf. [Disyorkan: Tutorial video PHP]

Mengenai DTM

DTM ialah pengurus transaksi teragih sumber terbuka berdasarkan bahasa Go, menyediakan Keupayaan berkuasa untuk menggabungkan urus niaga merentas bahasa dan enjin storan. DTM secara elegan menyelesaikan masalah transaksi teragih seperti mati pucuk, pampasan batal dan penggantungan, dan juga menyediakan penyelesaian transaksi teragih yang mudah digunakan, berprestasi tinggi dan mudah dikembangkan secara mendatar.

Sorotan

  • Mudah untuk dimulakan
    • Mulakan perkhidmatan dengan konfigurasi sifar, sediakan antara muka HTTP yang sangat mudah, mengurangkan keperluan untuk bermula dengan transaksi yang diedarkan Kesukaran
  • rentas bahasa
    • boleh sesuai untuk syarikat yang mempunyai susunan berbilang bahasa. Mudah untuk menggunakan Go, Python, PHP, NodeJs, Ruby, C# dan bahasa lain.
  • Mudah digunakan
    • Pembangun tidak perlu lagi bimbang tentang pelbagai isu seperti penggantungan, pampasan batal, eksponen, dsb., teknologi halangan sub-transaksi pertama yang mengendalikan mereka bagi pihak anda
  • Mudah digunakan dan dikembangkan
    • Hanya bergantung pada MySQL/Redis, mudah digunakan, mudah dikelompokkan dan mudah dikembangkan secara mendatar
  • Pelbagai protokol transaksi teragih Menyokong
    • TCC, SAGA, XA, mesej dua fasa, penyelesaian sehenti kepada pelbagai masalah transaksi yang diedarkan

Perbandingan

Dalam bahasa bukan Jawa, tiada pengurus transaksi teragih matang selain DTM, jadi berikut adalah perbandingan antara DTM dan Seata, sumber terbuka yang paling matang projek dalam Java:

特性 DTM SEATA 备注
支持语言 Go、C#、Java、Python、PHP… Java DTM 可轻松接入一门新语言
存储引擎 支持数据库、Redis、Mongo等 数据库
异常处理 子事务屏障自动处理 手动处理 DTM 解决了幂等、悬挂、空补偿
SAGA事务 极简易用 复杂状态机
二阶段消息 最简消息最终一致性架构
TCC事务
XA事务
AT事务 建议使用XA AT 与 XA类似,但有脏回滚
单服务多数据源
通信协议 HTTP、gRPC Dubbo等协议 DTM对云原生更加友好
star数量 github stars github stars DTM 从 2021-06-04 发布 0.1版本,发展飞快

Jika dilihat dari ciri-ciri yang dibandingkan di atas, DTM mempunyai kelebihan yang besar dalam banyak aspek. Jika anda menganggap sokongan berbilang bahasa dan sokongan enjin berbilang storan, maka DTM sudah pasti pilihan pertama anda.

Pemasangan

Amat mudah untuk memasang dtm-client melalui Komposer

composer require dtm/dtm-client
Salin selepas log masuk
  • Jangan lupa untuk memulakan Pelayan DTM apabila menggunakannya

Konfigurasi

Fail Konfigurasi

Jika anda menggunakannya dalam rangka kerja Hyperf, selepas memasang komponen, anda boleh menggunakan perintah vendor:publish berikut untuk menerbitkan fail konfigurasi dalam satu bahagian ./config/autoload/dtm.php

php bin/hyperf.php vendor:publish dtm/dtm-client
Salin selepas log masuk

Jika anda Apabila digunakan dalam rangka kerja bukan Hyperf, salin fail ./vendor/dtm/dtm-client/publish/dtm.php ke direktori konfigurasi yang sepadan.

use DtmClient\Constants\Protocol;
use DtmClient\Constants\DbType;

return [
    // 客户端与 DTM Server 通讯的协议,支持 Protocol::HTTP 和 Protocol::GRPC 两种
    'protocol' => Protocol::HTTP,
    // DTM Server 的地址
    'server' => '127.0.0.1',
    // DTM Server 的端口
    'port' => [
        'http' => 36789,
        'grpc' => 36790,
    ],
    // 子事务屏障配置
    'barrier' => [
        // DB 模式下的子事务屏障配置
        'db' => [
            'type' => DbType::MySQL
        ],
        // Redis 模式下的子事务屏障配置
        'redis' => [
            // 子事务屏障记录的超时时间
            'expire_seconds' => 7 * 86400,
        ],
        // 非 Hyperf 框架下应用子事务屏障的类
        'apply' => [],
    ],
    // HTTP 协议下 Guzzle 客户端的通用配置
    'guzzle' => [
        'options' => [],
    ],
];
Salin selepas log masuk

Konfigurasikan middleware

Sebelum menggunakannya, anda perlu mengkonfigurasi DtmClientMiddlewareDtmMiddleware middleware sebagai middleware global pelayan ini menyokong spesifikasi PSR-15 dan boleh digunakan kepada setiap sokongan Rangka kerja normatif.
Untuk konfigurasi middleware dalam Hyperf, sila rujuk kepada Hyperf Documentation - Middleware bab.

Menggunakan

Menggunakan dtm-client adalah sangat mudah Kami menyediakan contoh projek dtm-php/dtm-sample untuk membantu anda memahami dan menyahpepijat dengan lebih baik.
Sebelum menggunakan komponen ini, anda juga amat disyorkan untuk membaca dokumentasi rasmi DTM untuk pemahaman yang lebih terperinci.

Mod TCC ialah penyelesaian transaksi fleksibel yang sangat popular, masing-masing terdiri daripada akronim Try-Confirm-Cancel Konsep ini pertama kali dicadangkan oleh Pat Helland dalam kertas kerja bertajuk "Life beyond Distributed Transactions: an Apostate's Opinion" yang diterbitkan pada 2007.

Fasa percubaan: cuba laksanakan, lengkapkan semua semakan perniagaan (konsistensi), simpan sumber perniagaan yang diperlukan (kuasi-pengasingan)
Sahkan peringkat: Jika Cuba semua cawangan berjaya, pergi ke peringkat Sahkan. Sahkan sebenarnya melaksanakan perniagaan tanpa sebarang semakan perniagaan dan hanya menggunakan sumber perniagaan yang dikhaskan dalam fasa Cuba
Fasa Batal: Jika salah satu daripada Percubaan semua cawangan gagal, ia pergi ke fasa Batal. Batal mengeluarkan sumber perniagaan yang dikhaskan semasa fasa Cuba.

Jika kami ingin menjalankan perniagaan yang serupa dengan pindahan antara bank, pindahan (TransOut) dan pindahan (TransIn) adalah dalam perkhidmatan mikro yang berbeza Rajah jujukan biasa bagi transaksi TCC yang berjaya adalah seperti berikut :

[DTM] Versi beta klien coroutine PHP v0.1 dikeluarkan!

Berikut menunjukkan cara menggunakannya dalam rangka kerja Hyperf adalah serupa

<?php
namespace App\Controller;

use DtmClient\TCC;
use DtmClient\TransContext;
use Hyperf\Di\Annotation\Inject;
use Hyperf\HttpServer\Annotation\Controller;
use Hyperf\HttpServer\Annotation\GetMapping;
use Throwable;

#[Controller(prefix: &#39;/tcc&#39;)]
class TccController
{

    protected string $serviceUri = &#39;http://127.0.0.1:9501&#39;;

    #[Inject]
    protected TCC $tcc;

    #[GetMapping(path: &#39;successCase&#39;)]
    public function successCase()
    {
        try {

            $this->tcc->globalTransaction(function (TCC $tcc) {
                // 创建子事务 A 的调用数据
                $tcc->callBranch(
                    // 调用 Try 方法的参数
                    [&#39;amount&#39; => 30],
                    // Try 方法的 URL
                    $this->serviceUri . &#39;/tcc/transA/try&#39;,
                    // Confirm 方法的 URL
                    $this->serviceUri . &#39;/tcc/transA/confirm&#39;,
                    // Cancel 方法的 URL
                    $this->serviceUri . &#39;/tcc/transA/cancel&#39;
                );
                // 创建子事务 B 的调用数据,以此类推
                $tcc->callBranch(
                    [&#39;amount&#39; => 30],
                    $this->serviceUri . &#39;/tcc/transB/try&#39;,
                    $this->serviceUri . &#39;/tcc/transB/confirm&#39;,
                    $this->serviceUri . &#39;/tcc/transB/cancel&#39;
                );
            });
        } catch (Throwable $e) {
            var_dump($e->getMessage(), $e->getTraceAsString());
        }
        // 通过 TransContext::getGid() 获得 全局事务ID 并返回
        return TransContext::getGid();
    }
}
Salin selepas log masuk

Corak Saga

Corak Saga adalah salah satu penyelesaian yang paling terkenal dalam bidang urus niaga yang diedarkan dan ia juga sangat popular dalam sistem utama & Kenneth Salem pada tahun 1987. Dalam SAGAS.

Saga ialah urus niaga yang akhirnya konsisten dan urus niaga yang fleksibel Ia juga dipanggil transaksi jangka panjang yang terdiri daripada satu siri urus niaga tempatan. Selepas setiap transaksi tempatan mengemas kini pangkalan data, ia akan menerbitkan mesej atau peristiwa untuk mencetuskan pelaksanaan transaksi tempatan seterusnya dalam transaksi global Saga. Jika transaksi tempatan gagal kerana beberapa peraturan perniagaan tidak dapat dipenuhi, Saga akan melaksanakan operasi pampasan untuk semua transaksi yang berjaya dilakukan sebelum transaksi yang gagal. Oleh itu, apabila membandingkan mod Saga dengan mod TCC, selalunya menjadi lebih menyusahkan untuk melaksanakan logik rollback kerana kekurangan langkah tempahan sumber.

Sebagai contoh, kami ingin menjalankan perniagaan yang serupa dengan pindahan antara bank, memindahkan 30 yuan dalam akaun A ke akaun B, menurut Saga Prinsip transaksi, kami membahagikan keseluruhan transaksi global kepada perkhidmatan berikut:

  • Perkhidmatan TransOut, di mana operasi akan dilakukan untuk memotong 30 yuan daripada akaun A
  • Perkhidmatan Pampasan Keluar (TransOutCompensate), gulung semula operasi pindahan keluar di atas, iaitu, akaun A meningkat sebanyak 30 yuan
  • dan dipindahkan ke perkhidmatan (TransIn) Di sini, akaun B meningkat sebanyak 30 yuan Pemindahan
  • Keluar daripada perkhidmatan pampasan (TransInCompensate) dan gulung semula operasi pemindahan di atas, iaitu, akaun B dikurangkan sebanyak 30 yuan

Logik keseluruhan transaksi ialah :

Melaksanakan pemindahan berjaya => Melaksanakan Pemindahan berjaya => Urus niaga global selesai

Jika ralat berlaku di tengah, seperti ralat dalam memindahkan ke akaun B, operasi pampasan yang dilaksanakan cawangan akan dipanggil, iaitu:

Melaksanakan pindahan keluar Berjaya=> Berjaya melaksanakan pemindahan masuk=> pemulangan selesai

Berikut ialah gambarajah pemasaan biasa bagi transaksi SAGA yang berjaya diselesaikan :

[DTM] Versi beta klien coroutine PHP v0.1 dikeluarkan!

以下展示在 Hyperf 框架中的使用方法,其它框架类似

namespace App\Controller;

use DtmClient\Saga;
use DtmClient\TransContext;
use Hyperf\Di\Annotation\Inject;
use Hyperf\HttpServer\Annotation\Controller;
use Hyperf\HttpServer\Annotation\GetMapping;

#[Controller(prefix: &#39;/saga&#39;)]
class SagaController
{

    protected string $serviceUri = &#39;http://127.0.0.1:9501&#39;;

    #[Inject]
    protected Saga $saga;

    #[GetMapping(path: &#39;successCase&#39;)]
    public function successCase(): string
    {
        $payload = [&#39;amount&#39; => 50];
        // 初始化 Saga 事务
        $this->saga->init();
        // 增加转出子事务
        $this->saga->add(
            $this->serviceUri . &#39;/saga/transOut&#39;, 
            $this->serviceUri . &#39;/saga/transOutCompensate&#39;, 
            $payload
        );
        // 增加转入子事务
        $this->saga->add(
            $this->serviceUri . &#39;/saga/transIn&#39;, 
            $this->serviceUri . &#39;/saga/transInCompensate&#39;, 
            $payload
        );
        // 提交 Saga 事务
        $this->saga->submit();
        // 通过 TransContext::getGid() 获得 全局事务ID 并返回
        return TransContext::getGid();
    }
}
Salin selepas log masuk

Atas ialah kandungan terperinci [DTM] Versi beta klien coroutine PHP v0.1 dikeluarkan!. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Tetapan grafik terbaik
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Cara Memperbaiki Audio Jika anda tidak dapat mendengar sesiapa
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Pembalakan PHP: Amalan Terbaik untuk Analisis Log PHP Pembalakan PHP: Amalan Terbaik untuk Analisis Log PHP Mar 10, 2025 pm 02:32 PM

Pembalakan PHP adalah penting untuk memantau dan menyahpepijat aplikasi web, serta menangkap peristiwa kritikal, kesilapan, dan tingkah laku runtime. Ia memberikan pandangan yang berharga dalam prestasi sistem, membantu mengenal pasti isu -isu, dan menyokong penyelesaian masalah yang lebih cepat

Bekerja dengan Data Sesi Flash di Laravel Bekerja dengan Data Sesi Flash di Laravel Mar 12, 2025 pm 05:08 PM

Laravel memudahkan mengendalikan data sesi sementara menggunakan kaedah flash intuitifnya. Ini sesuai untuk memaparkan mesej ringkas, makluman, atau pemberitahuan dalam permohonan anda. Data hanya berterusan untuk permintaan seterusnya secara lalai: $ permintaan-

Curl dalam PHP: Cara Menggunakan Pelanjutan PHP Curl dalam API REST Curl dalam PHP: Cara Menggunakan Pelanjutan PHP Curl dalam API REST Mar 14, 2025 am 11:42 AM

Pelanjutan URL Pelanggan PHP (CURL) adalah alat yang berkuasa untuk pemaju, membolehkan interaksi lancar dengan pelayan jauh dan API rehat. Dengan memanfaatkan libcurl, perpustakaan pemindahan fail multi-protokol yang dihormati, php curl memudahkan execu yang cekap

Respons HTTP yang dipermudahkan dalam ujian Laravel Respons HTTP yang dipermudahkan dalam ujian Laravel Mar 12, 2025 pm 05:09 PM

Laravel menyediakan sintaks simulasi respons HTTP ringkas, memudahkan ujian interaksi HTTP. Pendekatan ini dengan ketara mengurangkan redundansi kod semasa membuat simulasi ujian anda lebih intuitif. Pelaksanaan asas menyediakan pelbagai jenis pintasan jenis tindak balas: Gunakan Illuminate \ Support \ Facades \ http; Http :: palsu ([ 'Google.com' => 'Hello World', 'github.com' => ['foo' => 'bar'], 'forge.laravel.com' =>

12 skrip sembang php terbaik di codecanyon 12 skrip sembang php terbaik di codecanyon Mar 13, 2025 pm 12:08 PM

Adakah anda ingin memberikan penyelesaian segera, segera kepada masalah yang paling mendesak pelanggan anda? Sembang langsung membolehkan anda mempunyai perbualan masa nyata dengan pelanggan dan menyelesaikan masalah mereka dengan serta-merta. Ia membolehkan anda memberikan perkhidmatan yang lebih pantas kepada adat anda

Terangkan konsep pengikatan statik lewat dalam PHP. Terangkan konsep pengikatan statik lewat dalam PHP. Mar 21, 2025 pm 01:33 PM

Artikel membincangkan pengikatan statik lewat (LSB) dalam PHP, yang diperkenalkan dalam Php 5.3, yang membolehkan resolusi runtime kaedah statik memerlukan lebih banyak warisan yang fleksibel. Isu: LSB vs polimorfisme tradisional; Aplikasi Praktikal LSB dan Potensi Perfo

Menyesuaikan/Memperluas Rangka Kerja: Cara Menambah Fungsi Custom. Menyesuaikan/Memperluas Rangka Kerja: Cara Menambah Fungsi Custom. Mar 28, 2025 pm 05:12 PM

Artikel ini membincangkan menambah fungsi khusus kepada kerangka kerja, memberi tumpuan kepada pemahaman seni bina, mengenal pasti titik lanjutan, dan amalan terbaik untuk integrasi dan debugging.

See all articles