sergebezborodov/beanstalk-yii2

Yii Framework 2 的 Beanstalk 组件

dev-master 2015-03-17 15:43 UTC

This package is not auto-updated.

Last update: 2024-09-24 02:52:34 UTC


README

#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' 事件中。

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

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