Laravel-自动执行排队的作业

时间:2018-06-21 11:26:38

标签: php laravel laravel-queue laravel-jobs

我有工作要发送几封电子邮件。

在我的控制器中,我将该工作称为:

dispatch(new SendStartPatEmail($data));

记录将保存在表作业中。

但是要执行该作业,我必须手动运行php artisan queued:work。 如何自动执行此操作?

4 个答案:

答案 0 :(得分:4)

有很多不同的方式,所有方式都取决于您所使用的环境。 Laravel倾向于建议使用Supervisor来监视您的队列工作程序并使它们保持运行。

或者,您可能希望立即执行作业,而不是将其添加到队列中。您可以通过在配置中将队列驱动程序设置为sync来完成此操作:

config / queue.php

'default' => env('QUEUE_DRIVER', 'sync'),

或在您的.env文件中(假设您的配置已按上述步骤进行设置)

.env

QUEUE_DRIVER=sync

答案 1 :(得分:1)

已经回答here

  

是的,如果您使用Linux,则可以使用例如supervisor。   运行<p></p> <section id="skillbar"> <div class="bar"> <div class="activate" data-percent="90%" style="transition-timing-function: linear;">C++</div> </div> <div class="bar"> <div class="activate" data-percent="100%" style="transition-timing-function: ease;">C#</div> </div> <div class="bar"> <div class="activate" data-percent="50%" style="transition-timing-function: ease-in;">Java</div> </div> <div class="bar"> <div class="activate" data-percent="100%" style="transition-timing-function: ease-out;">HTML</div> </div> <div class="bar"> <div class="activate" data-percent="50%" style="transition-timing-function: ease-in-out;">CSS</div> </div> <div class="bar"> <div class="activate" data-percent="20%" style="transition-timing-function: ease;">JavaScript</div> </div> <div class="bar"> <div class="activate" data-percent="50%" style="transition-timing-function: ease-out;">SQL</div> </div> <div class="bar"> <div class="activate" data-percent="30%" style="transition-timing-function: ease-out;">CISCO</div> </div> <div class="bar"> <div class="activate" data-percent="10%" style="transition-timing-function: linear;">Python</div> </div> <div class="bar"> <div class="activate" data-percent="80%" style="transition-timing-function: ease-in-out;">Microsoft Office</div> </div> <div class="bar"> <div class="activate" data-percent="40%" style="transition-timing-function: ease;">GIMP</div> </div> </section> <p></p> <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>(您需要将此命令添加到   主管配置文件),它将确保所有时间   命令正在运行。

答案 2 :(得分:0)

defaultConfig { applicationId "com.visionapps.app.swipe" minSdkVersion 21 targetSdkVersion 27 } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt' } } packagingOptions { exclude 'META-INF/license.txt' exclude 'META-INF/LICENSE' }}dependencies { implementation fileTree(include: ['*.jar'], dir: 'libs') androidTestImplementation('com.android.support.test.espresso:espresso-core:2.2.2', { exclude group: 'com.android.support', module: 'support-annotations' }) implementation 'com.android.support:appcompat-v7:27.1.1' implementation 'com.android.support:support-v4:27.1.1' implementation 'com.android.support:design:27.1.1' implementation 'com.android.support.constraint:constraint-layout:1.1.0' implementation files('libs/otto-1.3.3.jar') testImplementation 'junit:junit:4.12' implementation 'com.android.support:cardview-v7:27.1.1' implementation 'com.android.support:customtabs:27.1.1' implementation 'com.android.support:animated-vector-drawable:27.1.1'} 是一个简单的命令,它监听队列并执行一些作业。

整个概念是什么?

您可以在后台运行此简单命令,队列中的所有作业都将被执行。
但是,在后台运行进程(php artisan queue:work)并不总是安全的。

为什么?因为总有可能由于内存泄漏而终止或阻塞该过程。

在这种情况下,laravel建议使用 Supervisor 。Supervisor是另一个类似于服务的进程。它负责检查queue:work创建的进程,正常运行还是正常运行。它应该重新启动。

这种方式php artisan queue:work在后​​台运行,但是有一种机制(主管)可以在出现问题时重新启动该过程

答案 3 :(得分:0)

有一种dispatch_now( ... )方法,用于指定要同步运行的作业。

我不在乎下划线,因此我通常创建一个调用下划线版本的辅助方法dispatchNow( ... )