buzzingpixel/php-queue

1.2.0 2023-10-06 18:45 UTC

This package is auto-updated.

Last update: 2024-09-06 20:50:52 UTC


README

一个相当简单的PHP队列系统,您可以将其添加到几乎任何使用PSR-11容器的PHP应用程序中。

驱动器

目前,此软件包提供的唯一驱动器是Redis驱动器。但如果您想提供自己的驱动器,只需实现 \BuzzingPixel\Queue\QueueHandler 接口,并将容器连接到在请求该接口时提供该驱动器。

否则,将 \BuzzingPixel\Queue\QueueHandler 连接到提供 \BuzzingPixel\Queue\RedisDriver\RedisQueueHandler。PHP的 \Redis 和 Symfony 的 \Symfony\Component\Cache\Adapter\RedisAdapter 也需要通过构造函数/容器提供。

使用方法

队列名称

您可以设置多个队列名称,以便为特定名称/频道分配专用运行器。如果不这样做,将使用默认设置,并且您可以设置您的运行器(们)来消费该默认队列。如果您想设置多个队列名称,请实现 \BuzzingPixel\Queue\QueueNames 并设置您的容器以提供您的实现,或者将此实现提供给 QueueHandler。

入队

当您想入队某些内容时,在您的代码中调用 \BuzzingPixel\Queue\QueueHandler 并通过 enqueue 方法添加 \BuzzingPixel\Queue\QueueItem。您可以提供您希望添加的 QueueItem 运行的队列名称。

消费队列

最终,您需要一个或多个运行器,它们每隔一秒或五秒调用一次 \BuzzingPixel\Queue\QueueHandler 上的 consumeNext 方法。如果您有多个队列名称可用,您至少需要一个运行器针对每个名称。您可以使用类似 supervisor 之类的工具运行脚本并确保它每秒运行。或者,您可以设置一个 docker 容器,如果出现问题会自动重启,并且每秒运行队列。

此软件包提供了一个 Symfony 控制台命令,如果您使用 Symfony Console(或我的首选 Silly),则可以使用它。通过您的容器加载 \BuzzingPixel\Queue\Framework\QueueConsumeNextSymfonyCommand,并将其添加到您的 Symfony 控制台应用程序中。

然后,通过您的 CLI 应用程序运行命令 buzzingpixel-queue:consume-next。这将消耗 default 队列名称。对于消耗其他队列名称,请使用 --queue-name=MY_QUEUE_NAME 参数。

更改命令名称

如果您想更改命令名称,可以通过 \QueueConsumeNextSymfonyCommand 类的 name 构造函数参数来完成。配置您的 DI 以提供您偏好的命令名称。