编程

Laravel 12.34 中的 Failover 队列驱动

9 2025-10-29 02:00:00

Failover 队列驱动

Laravel 12.34 引入了新的故障转移(failover)队列驱动,以提高处理作业的可靠性。它允许你按优先级定义多个队列连接。如果第一个连接失败,Laravel 会自动尝试将作业推送到下一个可用的连接。

此功能在正常运行时间和作业交付至关重要的生产环境中尤为有用。

Failover 队列驱动的工作原来

故障转移(failover)驱动充当多个队列连接的包装器。当一个作业被调度时,Laravel 会尝试将其推送到第一个连接。如果该连接失败,它会自动尝试列表中的下一个连接,直到成功或耗尽所有配置的连接。

这确保了即使主队列系统(例如 Redis)暂时宕机,作业也不会丢失。

定义 Failover 队列连接

你可以在 config/queue.php 文件中配置 failover 驱动。示例如下:

'connections' => [
    'failover' => [
        'driver' => 'failover',
        'connections' => [
            'redis',
            'database',
        ],
    ],
 
    'redis' => [
        'driver' => 'redis',
        'connection' => 'default',
        'queue' => env('REDIS_QUEUE', 'default'),
        'retry_after' => 90,
    ],
 
    'database' => [
        'driver' => 'database',
        'table' => 'jobs',
        'queue' => 'default',
        'retry_after' => 90,
    ],
],

本例中:

  • Laravel 将会首先将 Job 推送给 Redis 队列。
  • 如果 Redis 不可用,将回退到 database 队列。

设置默认驱动链接

在定义完 failover 驱动后,你可以在 .env 文件中将其设为默认队列:

QUEUE_CONNECTION=failover

这确保了所有队列 Job 将自动使用 failover 的逻辑。

何时使用 failover 驱动

failover 队列驱动适合于以下机制情况:

  • Job 可靠性至关重要的应用。
    具有多个队列后端(例如 Redis、SQS 和数据库)的系统。
    高可用性环境,其中一个队列系统的停机不应中断作业处理。

总结

Laravel 的故障转移(failover)队列驱动可在主连接发生故障时优雅地回退到备用连接,从而确保作业调度不中断。只需几行代码即可完成配置,但却能显著提升生产环境应用的弹性。

更多详情,请参阅 Laravel 官方队列故障转移文档和框架 PR #57341。

 

PHP
下一篇