gpt4 book ai didi

laravel-5 - 如何在指定队列运行 Laravel 作业

转载 作者:行者123 更新时间:2023-12-01 09:18:06 25 4
gpt4 key购买 nike

我有一个工作来向用户发送短信。我想在指定的队列名称上运行此作业。例如,此作业添加到“ SMS ”队列。所以我找到了一种方法来做到这一点,但它存在一些错误。
创建作业实例并使用 onQueue() 函数来执行此操作 :

    $resetPasswordJob = new SendGeneratedPasswordResetCode(app()->make(ICodeNotifier::class), [
'number' => $user->getMobileNumber(),
'operationCode' => $operationCode
]);

$resetPasswordJob->onQueue('SMS');

$this->dispatch($resetPasswordJob);
我的工作类是这样的:
class SendGeneratedPasswordResetCode implements ShouldQueue
{
use InteractsWithQueue, Queueable;

/**
* The code notifier implementation.
*
* @var ICodeNotifier
*/
protected $codeNotifier;

/**
* Create the event listener.
*
* @param ICodeNotifier $codeNotifier
* @return self
*/
public function __construct(ICodeNotifier $codeNotifier)
{
$this->codeNotifier = $codeNotifier;
}

/**
* Handle the event.
*
* @return void
*/
public function handle()
{
echo "bla blaa bla";
#$this->codeNotifier->notify($event->contact->getMobileNumber(), $event->code);
}

public function failed()
{
var_dump("failll");
}
}
所以我输入这个命令来控制台:
php artisan queue:listen --queue=SMS --tries=1
但是我在执行此作业时收到此错误消息:

[InvalidArgumentException]

No handler registered for command [App\Services\Auth\User\Password\SendGeneratedPasswordResetCode]


备注 : 其他方式是将事件添加到 EventServiceProvider 的 属性并触发事件。但它不适用于指定队列名称。

最佳答案

您还可以通过设置 Job 来指定您希望将作业放置到的队列。对象 queue构造属性:

class SendGeneratedPasswordResetCode implements ShouldQueue
{
// Rest of your class before the construct

public function __construct(ICodeNotifier $codeNotifier)
{
$this->queue = 'SMS'; // This states which queue this job will be placed on.
$this->codeNotifier = $codeNotifier;
}

// Rest of your class after construct

然后您不需要提供 ->onQueue()该作业的每个实现/使用方法,如 Job类本身会为你做。

我在 Laravel 5.6 中对此进行了测试

关于laravel-5 - 如何在指定队列运行 Laravel 作业,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39356342/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com