【问题标题】:Should I implement shouldQueue for every single notification我应该为每个通知实现 shouldQueue
【发布时间】:2020-01-21 12:31:18
【问题描述】:

我有一个叫 NotifyUsersJob 的作业类,这个类当然实现了 shouldQueue 接口,这是 Laravel 给我的默认队列类。 在handle方法中,我有这个逻辑。

Notification::send($this->users, new NotifyUser($this->message));

在 NotifyUser 通知类中,我发送通知 throw WebPushChannel。 我的问题是我是否应该在 NotifyUser 类中实现 shouldQueue ,如果我应该这样做,为什么? 顺便说一句,一切都很好,两者都很好,但我想知道这样做的正确方法。

【问题讨论】:

    标签: laravel web-push laravel-queue laravel-notification


    【解决方案1】:

    这取决于您要达到的目标。 如果您想在后台运行通知,那么可以。使用应该队列将创建一个在后台处理的作业,这样您就不必等到它被处理。

    但是,如果您认为您的应用程序可能会在某个时候发生故障,那么您将无法在当时和那里得到错误。如果将数据库用于队列,则必须从失败的作业表中提取。 所以我的收获是。

    1. 如果您认为您的通知可能需要一些时间来处理,请使用 shouldqueue 以便它在后台运行并且您的应用程序会滞后
    2. 如果您认为在通知不起作用时需要立即获取错误,请不要使用 shouldQueue

    【讨论】:

    • 谢谢你的回答,我明白了,其实我正在发送成千上万的推送通知,所以会花费很多时间,所以我认为我应该实现 shouldQueue 来保护服务器不会崩溃,因为如果没有 shouldQueue,服务器将一个接一个地执行所有通知,这可能会导致服务器崩溃,但是使用 shouldQueue,服务器会安静地执行它们,这就是我所需要的,我做对了吗?
    • 是 队列应该在后台运行。因此,如果您一次发送大量通知,则应始终使用 shouldqueue。还要在您的计划运行命令上指定尝试。尝试 3 或 4 次,以便如果通知中断,它将继续尽快处理下一个。我建议使用 Redis 来存储排队的作业。
    猜你喜欢
    • 1970-01-01
    • 2019-09-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-26
    • 1970-01-01
    相关资源
    最近更新 更多