buzzingpixel / php-queue
Requires
- php: ^8.2
- lcobucci/clock: ^3.1
- psr/cache: ^3.0
- psr/clock: ^1.0
- psr/log: ^2
- ramsey/uuid: ^4.7
- symfony/cache: ^6.2
Requires (Dev)
- doctrine/coding-standard: ^11.0.0
- mnapoli/silly: ^1.8
- phpstan/phpstan: ^1.10
- phpstan/phpstan-deprecation-rules: ^1.1
- phpstan/phpstan-strict-rules: ^1.5
- squizlabs/php_codesniffer: ^3.6
- symfony/console: ^6.2
- symfony/var-dumper: ^6.2
Suggests
- ext-redis: Required to use the Redis queue driver
- mnapoli/silly: If you're using the Silly Console app, a buzzingpixel-queue:consume-next command is supplied
- symfony/console: If you're using Symfony Console, a buzzingpixel-queue:consume-next command is supplied
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 以提供您偏好的命令名称。