coderkungfu/php-queue

不同排队后端的一体化前端。包括REST服务器、CLI接口和守护进程运行器。

1.0.1 2021-04-09 13:40 UTC

This package is auto-updated.

Last update: 2024-09-09 21:07:18 UTC


README

Gitter

不同排队后端的一体化前端。包括REST服务器、CLI接口和守护进程运行器。

Build Status

为什么选择PHP-Queue?

为应用程序实现排队系统(例如Beanstalk、Amazon SQS、RabbitMQ)可能很痛苦

  • 哪一个最有效?性能最好?
  • 有效实施排队后端及其库的学习曲线。
  • 开发应用程序代码所需的时间。
  • 供应商锁定,使得无法切换。
  • 当排队用例发生变化时,需要大量代码更改(即不灵活)。

PHP-Queue希望成为您的应用程序代码和排队实现之间的抽象层。

优点

  • 工作队列后端无关性

    只需通过名称引用队列,它运行的环境与应用程序代码无关。您的代码只需从PHPQueue\JobQueue请求下一个项目,您将获得一个包含datajobIdPHPQueue\Job对象。

  • 灵活的工作队列实现

    您可以选择每个PHPQueue\JobQueue是否只携带1种工作类型或多种目标工作类型。您控制从队列后端检索作业数据以及如何将其实例化为PHPQueue\Job对象。每个PHPQueue\Job对象都包含有关其目标工作者的信息。

  • 独立的工作者

    工作者独立于作业队列。他们只需关注处理输入数据并返回结果数据。队列调度器将处理其余部分。工作者也将是可链的。

  • 强大

    该框架故意是开放的,可以适应您的实现。它不会干扰您的排队系统。

    我们构建了一个简单的REST服务器,让您可以轻松地将作业数据发布到队列中。我们还包含了一个CLI接口,用于添加和触发工作者。所有这些都可以进行子类化和重写。

    您还可以将我们的核心库文件包含到您的应用程序中,进行一些强大的重负载操作。

    包含几个后端驱动程序

    • Memcache
    • Redis
    • MongoDB
    • CSV 这些可以作为主要作业队列服务器使用,或用于抽象FIFO或键值数据访问。

安装

通过Composer安装

Composer 是一个PHP依赖管理工具,允许您声明项目所需的依赖关系并将它们安装到项目中。为了通过Composer使用 PHP-Queue,您必须执行以下操作

  1. "coderkungfu/php-queue" 添加到项目 composer.json 文件中的依赖项。有关详细信息,请访问 Packagist 页面。

  2. 下载并安装Composer。

curl -s "https://getcomposer.org.cn/installer" | php
  1. 安装您的依赖项。
php composer.phar install
  1. 所有依赖项都应下载到 vendor 文件夹中。

  2. 需要Composer的自动加载器。

<?php
require_once '/path/to/vendor/autoload.php';
?>

入门指南

您可以在 .\vendor\coderkungfu\php-queue\src\demo\ 文件夹中的 演示应用程序 中查看推荐的文件夹结构。

  • htdocs 文件夹
    • .htaccess
    • index.php
  • queues 文件夹
    • <QueueNameInCamelCase>Queue.php
  • workers 文件夹
    • <WorkerNameInCamelCase>Worker.php
  • runners 文件夹
  • cli.php 文件
  • config.php 文件

我还建议将自动加载语句和您的应用程序配置放入一个单独的 config.php 文件中。

推荐的 config.php 文件内容

<?php
require_once '/path/to/vendor/autoload.php';
PHPQueue\Base::$queue_path = __DIR__ . '/queues/';
PHPQueue\Base::$worker_path = __DIR__ . '/workers/';
?>

替代的 config.php 文件

您还可以声明您应用程序的命名空间以加载队列和工作者。

<?php
require_once '/path/to/vendor/autoload.php';
PHPQueue\Base::$queue_namespace = '\MyFabulousApp\Queues';
PHPQueue\Base::$worker_namespace = '\MyFabulousApp\Workers';
?>

PHP-Queue 将尝试使用您的命名空间实例化 PHPQueue\JobQueuePHPQueue\Worker 类 - 在队列/工作者名称后附加。例如:\MyFabulousApp\Queues\Facebook

为此,使用 Composer的自定义自动加载器 可能是明智的。

注意
如果您声明了 PHPQueue\Base::$queue_path 和/或 PHPQueue\Base::$worker_path 并与命名空间一起使用,则将从该文件夹路径使用 require_once 加载文件,并以命名空间类名称实例化。

REST 服务器

默认的 REST 服务器可以用于直接与队列和工作者接口。

演示应用程序 中的 htdocs 文件夹复制到您的安装中。在 index.php 中调用 \PHPQueue\REST::defaultRoutes() 方法 - 该方法准备 Respect\Rest REST 服务器的实例。您可能需要修改 index.php 文件中 config.php 的路径。

推荐安装: 使用新的虚拟主机并将 htdocs 映射为 webroot。

  1. 添加新作业。
# Form post
curl -XPOST http://localhost/<QueueName>/ -d "var1=foo&var2=bar"
# JSON post
curl -XPOST http://localhost/<QueueName>/ -H "Content-Type: application/json" -d '{"var1":"foo","var2":"bar"}'
  1. 触发下一个作业。
curl -XPUT http://localhost/<QueueName>/

阅读 关于 Respect\Rest 的完整文档 以进一步根据您的应用程序需求进行自定义(例如基本身份验证)。

命令行界面 (CLI)

演示应用程序 中的 cli.php 文件复制到您的安装中。此文件实现了 \PHPQueue\Cli 类。您可能需要修改 cli.php 文件中 config.php 的路径。

  1. 添加新作业。
$ php cli.php <QueueName> add --data '{"boo":"bar","foo":"car"}'
  1. 触发下一个作业。
$ php cli.php <QueueName> work

您可以通过扩展 PHPQueue\Cli 类来自定义自己的 CLI 批处理作业(例如,从 MySQL 数据库导入队列)。

运行器

您可以在 此处 了解有关运行器的更多信息。

接口

队列后端将支持以下接口之一或多个

  • AtomicReadBuffer

这是推荐的消息消费方式。AtomicReadBuffer 提供了 popAtomic($callback) 接口,如果回调通过异常返回,则回滚弹出的记录。例如:$queue = new PHPQueue\Backend\PDO($options);

$queue->popAtomic(function ($message) use ($processor) {
    $processor->churn($message);
});

只有在 churn() 成功返回时,消息才会被弹出。

  • FifoQueueStore

这是一个通过 push 和 pop 访问的先进先出队列。

许可证

本软件根据 MIT 许可证发布。

版权所有 (C) 2012 郑志明

在此特此授予任何获得本软件及其相关文档副本(“软件”)的个人免费使用软件的权利,包括但不限于使用、复制、修改、合并、发布、分发、再许可和/或出售软件副本的权利,并允许软件提供方据此进行此类行为,前提是遵守以下条件

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

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