Laravel 12.34 中的 Failover 队列驱动
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。