pnixx/delayed_job

PHP的异步延迟作业

2.0.0 2024-06-04 19:43 UTC

This package is not auto-updated.

Last update: 2024-09-24 21:10:45 UTC


README

#Delayed Job PHP

PHP的简单、高效的后台处理,使用线程处理多个作业。

##要求

  • PHP 8.1+
  • Redis 2.2+
  • Composer

##安装

composer require pnixx/delayed_job

##工作进程

在后台简单运行工作进程

bin/run start

扩展运行工作进程

bin/run start --process 5 --queue mailer -i /path/to/init.php

要列出所有命令,请使用--help-h参数。

要在部署后重新启动进程,请使用--restart-r参数。将会有一个新的进程等待完成所有正在运行的进程。

##作业

作业类必须包含perform方法

class TestJob extends PNixx\DelayedJob\Job {

	public function perform($args = []) {
		//Work process
	}
}

作业抛出的任何异常都会使作业返回到工作状态,并带有超时。如果您想为重试作业设置限制尝试次数,请将$attempt设置在您的类中。

作业还可以有setupcompleted方法。如果定义了setup方法,它将在perform方法之前被调用。在作业成功后,将调用completed方法。

class TestJob extends PNixx\DelayedJob\Job {

	/**
	 * Attempt count used for only delayed tasks
	 * default: 0 - always repeat until it reach success
	 */
	public static $attempt = 0;

	public function setup() {
		//Setup this job
	}

	public function perform($args = []) {
		//Work process
	}

	public function completed() {
		//Complete job callback
	}
}

##排队作业

作业可以通过使用now方法在当前线程中运行。如果您使用此方法,您可以在作业失败时处理异常。

//Run job in this thread without arguments
TestJob::now();

//Run job in this thread with arguments
TestJob::now(['name' => 'Jane']);

作业可以在后台线程中运行或添加到调度器中。

//Run job in a background
TestJob::later('mailer');

//Run job in a background with arguments
TestJob::later('mailer', ['name' => 'Jane']);

//Add job in a scheduler.
TestJob::later('mailer', ['name' => 'Jane'], strtotime('+1 day'));

##信号

  • QUIT - 等待作业完成处理然后退出
  • TERM / INT - 立即杀死作业然后退出而不保存数据

##作者

Sergey Odintsov, @pnixx