一个工作服务器。

v1.0.0 2022-01-23 21:42 UTC

This package is auto-updated.

Last update: 2024-09-04 23:27:51 UTC


README

Total Downloads Latest Stable Version

mef\Job 提供了作业队列和工作者的接口,以及处理来自后端工作者的作业的工作服务器实现。

示例

入队一个作业

<?php
use mef\Job\JobQueue\JobServer;
use mef\Job\JobStore\DatabaseJobStore;

$jobServer = new JobServer(new DatabaseJobStore($db));

// without a payload
$jobServer->enqueue('job name');

// with a payload
$jobServer->enqueue('job name', ['param1' => 'val1']);

调度一个作业

<?php
use mef\Job\JobQueue\JobServer;
use mef\Job\JobStore\DatabaseJobStore;

$jobServer = new JobServer(new DatabaseJobStore($db));
$jobServer->scheduleJob('job name', ['param1' => 'val1'], new DateTimeImmutable('+5 minutes'));

调度一个重复作业

<?php
use mef\Job\JobQueue\JobServer;
use mef\Job\JobStore\DatabaseJobStore;

$jobServer = new JobServer(new DatabaseJobStore($db));
$jobServer->scheduleJob('job name', ['param1' => 'val1'], new DateTimeImmutable, 'next Tuesday');

一个示例工作者

<?php
use mef\Job\JobInfoInterface;
use mef\Job\Worker\WorkerInterface;

class CopyFileWorker implements WorkerInterface
{
	public function runJob(JobInfoInterface $jobInfo)
	{
		$payload = $jobInfo->getPayload();

		if (copy($payload['src'], $payload['dest']) !== true)
		{
			throw new Exception('Unable to copy file');
		}
	}
}

运行工作服务器

包含在 bin/job-server.php 中的单线程工作服务器,在进程中运行 PHP 工作者。要并行运行多个工作者,应使用外部进程,例如 supervisord

工作服务器包含一个在通过 mef\Db 驱动器访问的数据库上运行的实现,但从理论上讲,它可以扩展为将作业传递给其他系统,例如 Gearman 或 Resque。

启动服务器

  • 运行包含的 etc/mysql-schema.sql

  • 复制 etc/default-job-server-config.php 并根据需要修改。有一些内容需要更改:job-id-generator(返回一个唯一 ID 以分配给新作业的函数)、worker-namespace(您的工作者所在的命名空间)、jobs-to-run(要运行的作业名称数组)以及数据库连接信息。

  • 运行 bin/job-server.php --config=path-to-config.php

服务器将一直运行,直到收到停止信号(Ctrl-C)。

许可证

版权 (C) 2015 Matthew Leverton

特此授予任何获得本软件及其相关文档文件(“软件”)副本的任何人免费使用软件的权利,包括但不限于使用、复制、修改、合并、发布、分发、再许可和/或出售软件副本的权利,并允许软件提供者根据以下条件这样做:

上述版权声明和本许可声明应包含在软件的所有副本或主要部分中。

软件按“原样”提供,不提供任何明示或暗示的保证,包括但不限于适销性、特定用途适用性和非侵权性保证。在任何情况下,作者或版权所有者均不对任何索赔、损害或其他责任负责,无论此类责任是基于合同、侵权或其他原因,以及与软件或软件的使用或其他交易有关。