├── .gitignore ├── README.md ├── composer.json └── demo.php /.gitignore: -------------------------------------------------------------------------------- 1 | .idea 2 | /vendor/ 3 | composer.lock -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # dtmcli-php-sample 2 | dtmcli的php使用示例 3 | ## 快速开始 4 | ### 安装运行dtm 5 | 参考[dtm安装运行](https://dtm.pub/guide/install.html) 6 | 7 | ### 启动示例 8 | ``` 9 | composer install 10 | php demo.php start 11 | ``` 12 | ### 输出 13 | 14 | 可以从dtmcli-php-sample的日志里看到执行的顺序如下: 15 | 16 | - TransOutTry 17 | - TransInTry 18 | - TransInConfirm 19 | - TransOutConfirm 20 | 21 | 整个tcc事务执行成功 22 | 23 | ### 特别说明 24 | 该示例使用了workerman扩展,不同系统环境依赖请查看官方文档:http://doc.workerman.net/install/requirement.html 25 | -------------------------------------------------------------------------------- /composer.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "yedf/dtmcli-php-sample", 3 | "authors": [ 4 | { 5 | "name": "onlyshow", 6 | "email": "onlyxiaoshow@gmail.com" 7 | } 8 | ], 9 | "require": { 10 | "mix/vega": "^3.0", 11 | "workerman/workerman": "^4.0", 12 | "yedf/dtmcli-php": "dev-main" 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /demo.php: -------------------------------------------------------------------------------- 1 | 30]; 13 | echo 'calling trans out' . PHP_EOL; 14 | $tcc->callBranch($req, $svc . '/TransOutTry', $svc . '/TransOutConfirm', $svc . '/TransOutCancel'); 15 | echo 'calling trans in' . PHP_EOL; 16 | $tcc->callBranch($req, $svc . '/TransInTry', $svc . '/TransInConfirm', $svc . '/TransInCancel'); 17 | }); 18 | } 19 | 20 | $vega = new Mix\Vega\Engine(); 21 | $vega->handleFunc('/api/TransOutTry', function (Mix\Vega\Context $ctx) { 22 | var_dump('TransOutTry', $ctx->request->getQueryParams(), $ctx->request->getParsedBody()); 23 | $ctx->JSON(200, ['result' => 'SUCCESS']); 24 | })->methods('POST'); 25 | $vega->handleFunc('/api/TransOutConfirm', function (Mix\Vega\Context $ctx) { 26 | var_dump('TransOutConfirm', $ctx->request->getQueryParams(), $ctx->request->getParsedBody()); 27 | $ctx->JSON(200, ['result' => 'SUCCESS']); 28 | })->methods('POST'); 29 | $vega->handleFunc('/api/TransOutCancel', function (Mix\Vega\Context $ctx) { 30 | var_dump('TransOutCancel', $ctx->request->getQueryParams(), $ctx->request->getParsedBody()); 31 | $ctx->JSON(200, ['result' => 'SUCCESS']); 32 | })->methods('POST'); 33 | 34 | $vega->handleFunc('/api/TransInTry', function (Mix\Vega\Context $ctx) { 35 | var_dump('TransInTry', $ctx->request->getQueryParams(), $ctx->request->getParsedBody()); 36 | $ctx->JSON(200, ['result' => 'SUCCESS']); 37 | })->methods('POST'); 38 | $vega->handleFunc('/api/TransInConfirm', function (Mix\Vega\Context $ctx) { 39 | var_dump('TransInConfirm', $ctx->request->getQueryParams(), $ctx->request->getParsedBody()); 40 | $ctx->JSON(200, ['result' => 'SUCCESS']); 41 | })->methods('POST'); 42 | $vega->handleFunc('/api/TransInCancel', function (Mix\Vega\Context $ctx) { 43 | var_dump('TransInCancel', $ctx->request->getQueryParams(), $ctx->request->getParsedBody()); 44 | $ctx->JSON(200, ['result' => 'SUCCESS']); 45 | })->methods('POST'); 46 | 47 | $vega->handleFunc('/api/FireTcc', function (Mix\Vega\Context $ctx) { 48 | FireTcc(); 49 | $ctx->JSON(200, ['result' => 'SUCCESS']); 50 | })->methods('POST'); 51 | 52 | $http_worker = new Workerman\Worker("http://0.0.0.0:4005"); 53 | $http_worker->onMessage = $vega->handler(); 54 | $http_worker->count = 4; 55 | Workerman\Worker::runAll(); 56 | --------------------------------------------------------------------------------