使用 Laravel Forge 在同一台服务器上创建多个队列

Posted

技术标签:

【中文标题】使用 Laravel Forge 在同一台服务器上创建多个队列【英文标题】:Multiple queues on the same server with Laravel Forge 【发布时间】:2018-07-09 01:43:33 【问题描述】:

我使用 Laravel Forge 在不同的环境中运行了三个相同的 Laravel 应用程序。

假设这是三个网站:

site.com(生产) staging.site.com(暂存) dev.site.com(开发)

在生产站点上,我运行 Laravel Horizo​​n 来监控生产站点的队列。

当我在dev.site.com 上运行密码重置时,由于队列中发生异常,电子邮件没有发送给用户。

Illuminate\Database\Eloquent\ModelNotFoundException: 没有查询结果 对于模型 [App\Models\User]。在 /home/forge/site.com/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Builder.php:412

如果您仔细查看错误,您会发现错误发生在site.com 生产环境中。因此,一封电子邮件在开发环境中排队,但在生产环境中执行。

这是我的queue.php 配置:

<?php

return [

    'default' => env('QUEUE_DRIVER', 'high'),

    'connections' => [

        'sync' => [
            'driver' => 'sync',
        ],

        'high' => [
            'driver' => 'redis',
            'connection' => 'default',
            'queue' => 'default',
            'retry_after' => 90,
        ],

        'medium' => [
            'driver' => 'redis',
            'connection' => 'default',
            'queue' => 'default',
            'retry_after' => 90,
        ],

        'low' => [
            'driver' => 'redis',
            'connection' => 'default',
            'queue' => 'default',
            'retry_after' => 90,
        ],

    ],

    'failed' => [
        'database' => env('DB_CONNECTION', 'mysql'),
        'table' => 'failed_jobs',
    ],

];

这些是 Forge 上所有三个环境的队列设置:

这是正常行为吗?还是我做错了什么?

【问题讨论】:

您有两个独立的数据库用于生产和开发站点吗? 其实我有。一种用于生产,一种用于暂存,一种用于开发。 你有 c/p 工作类代码吗?是否设置了一些环境变量? 【参考方案1】:

听起来您在所有站点上都使用相同的队列驱动程序,并且它们具有相同的配置,对吧?如果是这种情况,您将汇集所有三个站点,这会“污染”其他站点。您需要更改每个配置,以便它们具有单独的队列,这样它们就会保持分离。您甚至可以拥有单独的 redis、数据库、memcache 等实例。事实上,我建议您至少在生产中这样做。

【讨论】:

以上是关于使用 Laravel Forge 在同一台服务器上创建多个队列的主要内容,如果未能解决你的问题,请参考以下文章

无法使用 Forge、nginx 和 AWS 连接到 Laravel Websocket

在 Laravel forge 上存在类/服务识别问题

Laravel Forge - Node.js Websocket 超时

Laravel - 同一服务器上有两个站点的权限出错

同一服务器上的 Laravel 4.2 环境

在同一台服务器上分离beanstalkd队列