itsemon245/laravel-pausable-job

本包使您的 Laravel 任务可暂停和恢复

1.0.1 2024-07-11 18:53 UTC

This package is auto-updated.

Last update: 2024-09-11 19:20:32 UTC


README

Laravel_pausable_job_banner

Laravel 可暂停任务

此包允许您在运行时通过任何模型暂停和恢复 Laravel 任务。

注意

目前仅支持 Laravel 的默认数据库连接

用例

想象一下,您有一个电子邮件营销应用程序,您的客户可以创建活动并发送电子邮件给他们的订阅者。一个活动可能有数千封电子邮件,您希望添加一个功能,让您的客户可以简单地暂停活动,电子邮件将实时暂停。

由于活动电子邮件可能会使用队列中的任务来处理,因此我们无法暂停此特定活动的队列或任务,因为它们已经分发出去。
这就是此包发挥作用的地方。您可以在任何需要时简单地暂停与特定模型相关的所有任务。

安装

composer require itsemon245/laravel-pausable-job

发布迁移

php artisan vendor:publish --provider="Itsemon245\PausableJob\PausableJobServiceProvider"
php artisan migrate

用法

  1. 在您想要暂停的任务中,使用 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
    }
}
  1. 在您想要使用以暂停任务的模式中使用 HasPausableJobs 特性
//Other imports
 use Itsemon245\PausableJob\Traits\HasPausableJobs;

class Campaign extends Model
{
    //Other traits
   use HasPausableJobs;
}
  1. 使用 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();
  }

}

现在,只要与模型相关,您就可以随时暂停和恢复任何任务。

注意

感谢您考虑此包。
这是我第一个包,请随意批评我的错误并帮助我克服它们。
一个星号将非常感激,并将帮助增加我的动力。

如果您有任何建议,请不要犹豫。

再次感谢,祝您编码愉快