我有工作要发送几封电子邮件。
在我的控制器中,我将该工作称为:
dispatch(new SendStartPatEmail($data));
记录将保存在表作业中。
但是要执行该作业,我必须手动运行php artisan queued:work
。
如何自动执行此操作?
答案 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( ... )
。