link000 / laravel-gearman
Laravel队列的Gearman驱动
dev-master
2024-03-14 14:57 UTC
Requires
- php: >=8.1
- ext-gearman: *
- illuminate/support: ^10.0
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
然后我去检查我的邮箱
#问题
如果您发现任何问题,请打开一个问题或提交请求。
希望这个包能帮到您