Laravel-了解工作理念

问题描述 投票:0回答:2

与Laravel队列打交道,我了解的工作是保留在队列中以一个接一个地执行的任务。

Laravel文档说:

换句话说,如果您在未明确定义的情况下调度作业应该将其分派到哪个队列,作业将被放置在在连接的队列属性中定义的队列配置:

//此作业已发送到默认队列...

Job::dispatch();

//此作业已发送到“电子邮件”队列...

Job::dispatch()->onQueue('emails');

在同一文档页面的另一个地方,我找到:

 ProcessPodcast::dispatch($podcast);

ProcessPodcast是此处的作业,正在使用参数$podcast进行分派。但是在文档中,除了上述两行,我都找不到语法Job::

Q1)那么在哪里以及如何使用语法Job::

connectionsconfig/queue.php数组中的每个元素都有'queue' => 'default',

Q2) emails队列来自Job::dispatch()->onQueue('emails');的哪里?

laravel queue jobs laravel-queue laravel-jobs
2个回答
1
投票

A1:就像lagbox所说的,Job是您要创建和分发的任何作业的通用名称。

A2:不需要在任何地方定义队列,只需告诉Laravel wich队列,您就可以将作业分派到该队列。例如,如果您为数据库连接调用Job::dispatch()->onQueue('emails');,则将在队列作业表中创建一个新行(表名称默认为jobs),并且queue列将填充为emails 。之后,仅当您运行一个指定电子邮件队列为php artisan queue:work --queue=emails的工作程序时,才会执行此作业。如果config / queue.php文件中指定的数据库连接的默认队列是电子邮件队列,则在运行worker命令时不需要指定队列。

如果队列很多,则可以为每个队列创建一个进程,因此您可以定义运行每个作业队列的方式。


0
投票

那么在哪里以及如何使用语法Job ::?

您可以在任何地方使用它,也可以使用助手dispatch()或实现特征DispatchesJobs并调用$this->dispatch()。所有这些调用将起作用,创建您的作业对象并将其分派。

电子邮件队列来自Job :: dispatch()-> onQueue('emails'); ?

队列取决于您运行的驱动程序,如果您运行的是Horizo​​n,则将需要更改配置(并仍然启动系统进程)。您是否正在运行其他队列驱动程序,则必须在应运行它们的服务器上创建队列php artisan queue:work redis --queue=emails

[这些作业中也分配了哪些队列,取决于在onQueue()调用中指定了哪个队列,为了可维护性和确保作业在正确的队列上运行,我更喜欢将其设置在作业上。

class job implements ShouldQueue {
    protected $queue = 'emails';
}
© www.soinside.com 2019 - 2024. All rights reserved.