加入收藏 | 设为首页 | 会员中心 | 我要投稿 聊城站长网 (https://www.0635zz.com/)- 智能语音交互、行业智能、AI应用、云计算、5G!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

seata-php研发怎样做,要了解哪些知识

发布时间:2023-06-30 15:13:16 所属栏目:PHP教程 来源:
导读:今天就跟大家聊聊有关“seata-php开发怎样做,要了解哪些知识”的内容,可能很多人都不太了解,为了让大家认识和更进一步的了解,小编给大家总结了以下内容,希望这篇“seata-php开发怎样做,要了解哪
今天就跟大家聊聊有关“seata-php开发怎样做,要了解哪些知识”的内容,可能很多人都不太了解,为了让大家认识和更进一步的了解,小编给大家总结了以下内容,希望这篇“seata-php开发怎样做,要了解哪些知识”文章能对大家有帮助。
 
seata/seata-php 目前是基于 hyperf 框架开发的的一个分布式事物组件包,并且兼容 swoole 和 swow 两个协程扩展,希望后面的开发者们也能考虑到兼容这两个协程扩展
 
前置知识
 
希望大家在参与 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-生命周期事件
 
 

(编辑:聊城站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!