首頁  >  文章  >  後端開發  >  怎麼進行seata-php開發?開發指南淺析

怎麼進行seata-php開發?開發指南淺析

青灯夜游
青灯夜游轉載
2022-09-26 20:12:064147瀏覽

怎麼進行seata-php開發?這篇文章帶大家聊聊seata-php開髮指南,講解一些前置知識,希望對大家有幫助!

怎麼進行seata-php開發?開發指南淺析

這篇文章主要是希望能幫助大家參與到seata/seata-php 的開發中來,並且提供一些前置知識的講解。

seata/seata-php 目前是基於hyperf 框架開發的一個分散式事物元件包,並且相容於swooleswow 兩個協程擴展,希望後面的開發者們也能考慮到相容這兩個協程擴展

前置知識

希望大家在參與seata/seata-php 開發之前一定一定一定要要先了解以下的東西

  • ##seata

  • hyperf開發文件

  • swoole文件

  • swow

#如何啟動專案

首先我們需要找個檔案目錄將程式碼下載下來

# 根据自己实际情况来创建目录
mkdir ./seata-dev
接下來進入到我們的目錄內

# 根据自己实际情况来创建目录
cd ./seata-dev
我們將seata/seata-php clone 下來

# 根据自己实际情况来创建目录
git clone git@github.com:seata/seata-php.git
接下來根據自己是使用swoole,還是swow分別執行以下的命令來創建框架項目,附帶一份hyperf 項目創建文檔hyperf

# swoole
composer create-project hyperf/hyperf-skeleton 

# swow
composer create-project hyperf/swow-skeleton

# 使用 swow 扩展建议使用 hyperf3.0 版本
composer create-project hyperf/swow-skeleton:dev-master
接下來是進入到項目內將剛剛

clone 下來的seata/seata-php 載入到專案內

首先我們需要修改專案內的

composer.json 文件,加入如下內容

{
    "require": {
        "hyperf/seata": "dev-master"
    },
    "repositories": {
        "seata": {
            "type": "path",
            "url": "../seata-php"
        }
    }
}
最後在目錄再項目的目錄內執行

composer update -o 即可。

並且使用指令

php bin/hyperf.php vendor:publis hyperf/seata 發佈一下seata 設定檔

最後使用

php bin/hyperf.php start 啟動專案

最後的最後有興趣的小夥伴也可以深入了解一下

hyperf 元件包開發相關的文件

  • 元件開發指南

  • ConfigProvider 機制

##seata -php 是在何時啟動的

最後跟大家講解一下
seata/seata-php

專案是怎麼啟動的

我們可以看看
seata/seata-php

項目內Hyperf\Seata\Listener\InitListener 的程式碼link:InitListener#

<?php

declare(strict_types=1);
/**
 * This file is part of Hyperf.
 *
 * @link     https://www.hyperf.io
 * @document https://hyperf.wiki
 * @contact  group@hyperf.io
 * @license  https://github.com/hyperf/hyperf/blob/master/LIC
 */
namespace Hyperf\Seata\Listener;

use Hyperf\DbConnection\Db;
use Hyperf\Event\Contract\ListenerInterface;
use Hyperf\Framework\Event\MainWorkerStart;
use Hyperf\Seata\Annotation\GlobalTransactionScanner;
use Hyperf\Seata\Rm\DataSource\DataSourceProxy;
use Hyperf\Server\Event\MainCoroutineServerStart;

class InitListener implements ListenerInterface
{
    protected GlobalTransactionScanner $globalTransactionScanner;

    protected DataSourceProxy $dataSourceProxy;

    public function __construct(GlobalTransactionScanner $globalTransactionScanner, DataSourceProxy $dataSourceProxy)
    {
        $this->globalTransactionScanner = $globalTransactionScanner;
        $this->dataSourceProxy = $dataSourceProxy;
    }

    public function listen(): array
    {
        // 我们这里监听了下面两个事件,在 server 启动时候,则开始执行该监听器
        return [
            MainCoroutineServerStart::class,
            MainWorkerStart::class,
        ];
    }

    public function process(object $event)
    {
        // Execute any sql to init the database connection
        Db::select('select 1');
        // Init TM and RM clients
        // 这里则是开始初始化 TM 和 RM 的客户端
        $this->globalTransactionScanner->initClients();
    }
}
最後附帶一下

hyperf

的生命週期文件hyperf-生命週期事件推薦學習:《

PHP影片教學

以上是怎麼進行seata-php開發?開發指南淺析的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:learnku.com。如有侵權,請聯絡admin@php.cn刪除