link000 / laravel-gearman

Laravel队列的Gearman驱动

dev-master 2024-03-14 14:57 UTC

This package is not auto-updated.

Last update: 2024-03-14 15:19:12 UTC


README

本包为您提供了将Gearman作为本地队列后端服务的可能性

#安装

首先,您需要将其添加到您的composer.json文件中

其次,在config/app.php中,您需要取消注释原生队列服务提供者

//'Illuminate\Queue\QueueServiceProvider',

并替换为以下内容

'Pafelin\Gearman\GearmanServiceProvider',

然后,在您的config/queue.php文件中,您可以添加以下内容

'default' => 'gearman',
'connections' => array(
    'gearman' => array(
        'driver' => 'gearman',
        'host'   => 'localserver.6min.local',
        'queue'  => 'default',
        'port'   => 4730,
        'timeout' => 1000 //milliseconds
    )
)

或者,如果您有多个Gearman服务器

'default' => 'gearman',
'connections' => array(
    'gearman' => array(
        'driver' => 'gearman',
        'hosts'  => array(
            array('host' => 'localserver.6min.local', 'port' => 4730),
            array('host' => 'localserver2.6min.local', 'port' => 4730),
        ),
        'queue'  => 'default',
        'timeout' => 1000 //milliseconds
    )
)

然后在您的代码中,您可以添加以下代码(这是添加作业到队列的本地方式)

Queue::push('SomeClass', array('message' => 'The data that should be available in the SomeClass@fire method'));

小提示,您可以调用命名空间类,以及Laravel文档中用于调用自定义方法的任何内容都同样适用。

示例

我在我的app文件夹中添加了一个“service”文件夹,并在其中创建了一个名为“SendMail.php”的文件。类的代码如下

<?php

namespace TaskProcess\Services;

class SendMail {

    public function fire($job, $data)
    {
        //I send an email to my email address with subject "gearman test" and message whatever comes from gearman
        mail('pavel@taskprocess.com', 'gearman test', $data['message']);
    }

}

我在我的路由文件中添加了一个新的路由

Route::get('/gearman', function() {
    //in a loop I add 3 jobs to gearman with different content. The purpose is to see 3 different emails with 3 different contents
    foreach (array(1,2,3) as $row) {
        Queue::push('TaskProcess\Services\SendMail', array('message' => 'Message №' . $row));
    }
});

最后,我在控制台中运行

php artisan queue:listen

然后我去检查我的邮箱

#问题

如果您发现任何问题,请打开一个问题或提交请求。

希望这个包能帮到您