halaei/lqrm

Laravel 队列 Redis 模块

dev-master 2018-10-06 18:23 UTC

This package is auto-updated.

Last update: 2024-09-07 07:09:11 UTC


README

这是 Laravel 队列 Redis 驱动的 PHP 驱动。

为什么使用 lqrm?

因为

  1. 阻塞弹出现在比以前更可靠。
  2. 阻塞弹出现在也适用于延迟和保留作业。
  3. 延迟和保留作业的计时器位于服务器端,具有毫秒级精度。这意味着您不必担心同步您的 PHP 和 Redis 服务器,如果您的项目分布在不同的服务器上。此外,这使得 retry_afterblock_for 配置相互独立。
  4. Laravel 队列现在也可以用于其他编程语言和框架。请随意将其移植到您喜欢的语言中。

安装

首先通过 composer 安装该软件包

composer require halaei/lqrm

然后向您的 config/app.php 中添加服务提供者

Halaei\Lqrm\LaravelRedisQueueServiceProvider::class

要使用此软件包与 laravel/horizon 一起,请使用以下服务提供者

最后,在 app/queue.php 中将您的 Redis 队列连接的驱动程序更改为 lqrm,并将 block_for 设置为某个小的整数

'redis' => [
    'driver'      => 'lqrm',        // <<< switch to lqrm driver
    'connection'  => 'default',
    'queue'       => 'default',
    'retry_after' => 90,
    'block_for'   => 10,            // <<< set block_for
],

请注意,如果您需要在上述配置数组中增加 'block_for',您还应增加 queue:work 命令中的 --timeout。

详细考虑

以下是从原始 Laravel 5.7 驱动程序迁移到 lqrm 时的行为变化。我相信这些变化是最佳选择,并且可能对您的项目影响可忽略。

  1. 在 5.7 中,将 block_for 设置为 0 表示永久阻塞。在 lqrm 中,将 blocking_for 设置为 0 或任何小于 1 的值表示不进行任何阻塞。
  2. 使用 5.7 与 horizon 一起,调用 pop() 可能会触发 JobsMigrated() 事件,如果它从延迟和保留队列迁移作业。 lqrm 不触发此事件。
  3. 在 5.7 中,您可以选择性地禁用从保留队列中迁移过期作业。这在 lqrm 中不受支持。