sadovnik/beanstalk-yii2

为 Yii Framework 2 的 Beanstalk 组件

1.0.0 2016-12-21 16:56 UTC

This package is not auto-updated.

Last update: 2024-09-23 14:44:18 UTC


README

这是一个对 https://github.com/sergebezborodov/beanstalk-yii2 的临时分支

#Beanstalk Worker App for Yii2

这是什么?

查询是任何大型项目的重要组成部分。我过去的项目中使用了 Gearman 多年,当我开始开发 hotwork.ru 时,我阅读了大量关于不同查询系统的文章。最终我选择了 beanstalk - 它受到 memcache 协议的启发,它简单、快速且稳定。Beanstalk 在我的服务器上运行了三个月以上,从未重启。对于 rabbitmq 来说,这将是不可思议的。

如何安装

通过 composer 安装,添加到 composer.json

"sergebezborodov/beanstalk-yii2": "dev-master"

如何配置

要使用任何查询系统,您必须创建工作应用程序。它必须永久运行(在屏幕或 supervisor 上)并监听 beanstalk 服务器。客户端应用程序将任务设置到服务器,服务器调用工作应用程序执行。

创建工作文件,与控制台相同

#!/usr/bin/env php
<?php

$shared = require '...'; // load shared config of your app
$worker = require '..../worker.php'; // worker app config

$config = yii\helpers\ArrayHelper::merge($shared, $worker);

$application = new sergebezborodov\beanstalk\Application($config);
return $application->run();

工作配置示例

<?php
/**
 * Config for beanstalk workers
 */
return [
    'on beforeAction' => function () {
        Yii::$app->db->open();
    },
    'on afterAction' => function () {
        Yii::$app->db->close();
    },

    'exitOnDbException' => true, // sometimes db gone away, it will be good to restart worker

    'components' => [
        'router' => [
            'class' => 'sergebezborodov\beanstalk\Router',
            'routes' => [ // routes list, example
                'import' => 'import/worker/import',
                'mail'   => 'mail/worker/mail',
            ],
        ],
    ],
];

在工人完成任务后关闭数据库连接非常重要。将所有数据库连接添加到 'on beforeAction''on afterAction' 事件中。

##如何使用 您必须用管子名称的参数启动工人,例如:./worker import - 它将处理来自 import 管道的所有任务。./worker - 它将处理来自所有可用管道的所有任务。

##处理终止信号 在执行过程中终止某些任务将导致大问题,因为应用程序处理 SIGINT 信号(Ctrl+C)并等待活动任务结束。您可以通过将 handleSignals 属性设置为 false 来禁用此行为。PHP 必须编译带有 pcntl