我需要在 Laravel 中使用数据库来设置 Redis 队列和 Horizon

问题描述 投票:0回答:1

我目前有一个 api 项目,它是一种中间件 API。它获取请求并将其重定向到其他 API,并在 Redis 中缓存一些内容以加快访问速度。 因此我并不真正需要数据库,也没有设置任何数据库。 由于它还发送电子邮件,我想设置队列以使用 redis。据我了解,将队列驱动程序更改为 redis 非常简单。 我没有弄清楚的是,我是否需要一个数据库来存储失败的作业(因为 Laravel 通常会为此创建开箱即用的数据库)。 我的进一步计划是使用 Horizon 作为我的队列的仪表板。据我了解,地平线还可以挽救失败的工作。我发现一条评论说它们正在被时不时地冲走,这是七年前写的。所以我不确定那里是否发生了变化。 所以我的问题是:我是否需要设置一个数据库(例如 mysql)以确保没有 failed_jobs 丢失,或者我可以使用 Horizon 来解决这个问题吗?

地平线中的

FailedJobsController
正在使用
JobRepository
,这是由
RedisJobRepository

实现的

到目前为止,我还没有设置整个项目,因为我不知道如何确定 Horizon 是否真的刷新了失败的作业。

laravel database redis queue laravel-horizon
1个回答
0
投票

如果您使用 Redis 作为队列驱动程序,则不需要像 MySQL 这样的数据库来处理作业。

但是失败的工作又如何呢?以下是其工作原理的简要说明:

队列: 切换到 Redis 作为队列驱动程序后,Laravel 将根据 config/queue.php 中的队列配置处理并管理您的作业。如果特定作业失败,Laravel 将根据配置中的设置尽力重新处理作业。

失败的工作 在 Redis 的情况下,还提供对失败作业的支持。 Laravel 默认情况下使用数据库表来保存失败作业的日志数据。不过,对于 Redis,您不必拥有 SQL 数据库来处理失败的作业。

Laravel 地平线 失败作业存储:Horizon 还基于仪表板和漂亮的界面在 Redis 中保存每个作业的记录。未正确堆叠的实际作业也可以在 Horizon 的仪表板中进行查看。只要 Horizon 正确设置并运行,失败的作业就会存储在 Redis 中。 它们在Redis数据库中的持久化又如何呢?顺便说一句,如果配置正常,Horizon 不会自动清除失败的作业,除非您希望它们这样做。此信息可以更改 - 您可以定义 Redis 应收集失败作业数据并在 Laravel 配置中执行操作的小时数。

无需数据库 由于 Horizon 是您的最佳选择,并且它使用 Redis 管理失败的作业,因此您不需要仅用于失败的作业项目的 MySQL 数据库。 Horizon 包已经通过其 RedisJobRepository 管理失败的作业,因此除非配置说明或您这样做,否则它们不会被删除。 Horizon 配置意味着您可以在默认情况下如何以及何时从 Redis 中删除数据方面执行更多操作。

检查配置和日志:请务必检查 Horizon 设置以及 Redis 配置。确保您的 Redis 可以处理持久性,并根据需要为您的作业和失败的作业提供安全保障。还可以考虑设置日志记录,以便您知道当这些作业无法正确存储自身时会发生什么。

© www.soinside.com 2019 - 2024. All rights reserved.