itsemon245 / laravel-pausable-job
本包使您的 Laravel 任务可暂停和恢复
1.0.1
2024-07-11 18:53 UTC
Requires (Dev)
- orchestra/testbench: ^9.1
README
Laravel 可暂停任务
此包允许您在运行时通过任何模型暂停和恢复 Laravel 任务。
注意
目前仅支持 Laravel 的默认数据库连接
用例
想象一下,您有一个电子邮件营销应用程序,您的客户可以创建活动并发送电子邮件给他们的订阅者。一个活动可能有数千封电子邮件,您希望添加一个功能,让您的客户可以简单地暂停活动,电子邮件将实时暂停。
由于活动电子邮件可能会使用队列中的任务来处理,因此我们无法暂停此特定活动的队列或任务,因为它们已经分发出去。
这就是此包发挥作用的地方。您可以在任何需要时简单地暂停与特定模型相关的所有任务。
安装
composer require itsemon245/laravel-pausable-job
发布迁移
php artisan vendor:publish --provider="Itsemon245\PausableJob\PausableJobServiceProvider"
php artisan migrate
用法
- 在您想要暂停的任务中,使用
Pausable
特性
//Other imports use Itsemon245\PausableJob\Traits\Pausable; class EmailJob implements ShouldQueue { //Other traits use Pausable; public function __construct(public Campaign $campaign) { /** * Set which model is responsible to pause the job */ $this->setPausedBy($campaign); } public function handle(): void { /** * You can pause the job like this with your desired condition */ if ($this->campaign->paused_at) { $this->pause(); return; } // Handle the actual logic of the job } }
- 在您想要使用以暂停任务的模式中使用
HasPausableJobs
特性
//Other imports use Itsemon245\PausableJob\Traits\HasPausableJobs; class Campaign extends Model { //Other traits use HasPausableJobs; }
- 使用
HasPausableJobs
特性后,您的模型应该可以访问resumeJobs()
方法来再次恢复任务。您现在可以通过以下示例在控制器中暂停和恢复任务。
class CampaignController extends Controller{ public function pause(Campaign $campaign){ //By pausing the campaign the jobs will be automatically paused because of the condition in the EmailJob handle method $campaign->update([ 'paused_at' => now() ]); return back(); } public function resume(Campaign $campaign){ $campaign->update([ 'paused_at' => null ]); // To actually resume the jobs from paused state you have to call the resumeJob() method from the campaign $campaign->resumeJobs(); } }
现在,只要与模型相关,您就可以随时暂停和恢复任何任务。
注意
感谢您考虑此包。
这是我第一个包,请随意批评我的错误并帮助我克服它们。
一个星号将非常感激,并将帮助增加我的动力。
如果您有任何建议,请不要犹豫。