dyrynda / terminable-jobs
允许您使您的 Laravel 队列作业可终止。
Requires
- php: ^7.3|^8.0
- illuminate/queue: ^8.0
Requires (Dev)
- orchestra/testbench: ^6.0
- phpunit/phpunit: ^9.3.3
This package is auto-updated.
Last update: 2024-09-05 07:58:08 UTC
README
Terminable jobs 是一个小型包,允许您暂停 Laravel 队列作业的执行。
使用示例
假设您有以下队列作业
class PromotionalCampaign implements ShouldQueue { use InteractsWithQueue, Queuable; public function __construct() { // ... } public function handle() { // ... } }
假设您已经将数千个作业排队,用于向用户发送促销活动邮件,但您发现促销本身有错别字或缺失链接。
您可能想执行 queue:flush
,但如果您的作业在共享队列中,您将清除该队列上的 所有 作业,即使它们不是您想要的,这可能会导致处理丢失。
这就是 Terminable Jobs 的用武之地。
+ use Dyrynda\TerminableJobs\Terminable; class PromotionalCampaign implements ShouldQueue { - use InteractsWithQueue, Queuable; + use InteractsWithQueue, Terminable, Queuable; public function handle() { + $this->handleTermination(); // ... } + + protected function shouldTerminate(): bool + { + // Logic to determine if job should be terminated + }
如果 shouldTerminate()
返回 true
,则 handleTermination()
方法将从您的队列中删除作业并抛出 JobWasTerminated
异常,这将阻止作业被处理。
在它的最简单形式中,您可以在应用程序中简单地定义一个配置变量,通过 .env
文件控制,来开启或关闭此功能。
// config/jobs.php return [ 'promotional-campaign' => env('PROMOTIONAL_CAMPAIGN_ENABLED', true), ];
有了这个,您可以更新您的 shouldTerminate()
方法
protected function shouldTerminate(): bool
{
+ return config('jobs.promotional-campaign') === false;
}
这意味着如果您需要停止处理 PromotionalCampaign
作业,您将更新 PROMOTIONAL_CAMPAIGN_ENABLED
环境变量为 false
并重启您的队列工作进程。任何挂起的作业将提前终止,抛出 JobWasTerminated
异常。
为了避免将异常报告给您的日志或错误跟踪软件,您可能希望将 JobWasTerminated
类添加到您忽略的异常列表中
// app/Exceptions/Handler.php use Illuminate\Foundation\Exceptions\Handler as ExceptionHandler; + use Dyrynda\TerminableJobs\Exceptions\JobWasTerminated; class Handler extends ExceptionHandler { protected $dontReport = [ + JobWasTerminated::class, ];
安装
composer require dyrynda/terminal-jobs
安装完成后,您可以在作业类中使用 Terminable
特性,并在您的作业类中实现 shouldTerminate(): bool
方法。
支持
如果您对这个包有任何一般性问题,请在 Twitter 上与我联系。
如果您认为您已经发现了一个问题,请使用 GitHub 问题跟踪器 报告它,或者更好的是,从存储库分支并提交一个 pull request。
如果您使用这个包,我很乐意听听您的想法。谢谢!
Treeware
您可以免费使用此包,但如果它进入您的生产环境,您需要为世界买一棵树。
众所周知,应对气候危机并防止我们的温度超过 1.5C 的最佳工具之一是种树。如果您支持此包并为 Treeware 森林做出贡献,您将为当地家庭创造就业机会并恢复野生动物栖息地。
您可以通过 这里 买树。
在 treeware.earth 上了解更多关于 Treeware 的信息