Laravel 5.2 多项目在redis上使用队列,如果作业失败则记录遍历数据库

Laravel 5.2 multi projects use queue on redis, if failed job the record go across the database

我在同一台服务器 (Ubuntu 16.04) 上有两个项目,它们具有不同的数据库、用户名和不同的 user_password。 但是如果A项目的queue失败了,可能会插入到B项目的failed-job中table。 是的,这意味着有时它会将失败的记录插入正确的位置。 我用默认设置检查了 Laravel 配置。 我用supervisor keep walker。 那么,有人有同样的问题和解决方案吗? 我在这里 github 打开一个问题。 https://github.com/laravel/framework/issues/14403

作者回复。我已经通过这两个步骤解决了问题:

1.change config/cache.php

'prefix' => 'myProjectName', //the default value is laravel.

2.change config/database.php

 'redis' => [

    'cluster' => false,

    'default' => [
        'host'     => env('REDIS_HOST', 'localhost'),
        'password' => env('REDIS_PASSWORD', null),
        'port'     => env('REDIS_PORT', 6379),
        'database' => 2,                  //the default is 0
    ],

],

您还应该注意 config/queue。php,如果您的队列可能有超过 60 秒的时间来完成作业。

'redis' => [
        'driver'     => 'redis',
        'connection' => 'default',
        'queue'      => 'default',
        'expire'     => 120,        //the default is 60, and would be your like.
    ],

如果您想通过为 redis 连接指定前缀而不是使用不同的数据库来解决冲突,您可以使用以下配置。

对于predis(默认客户端)

'redis' => [
        'client' => 'predis',
        'cluster' => false,
        'options'=>[
            'prefix' => 'YOUR_PREFIX_HERE'
        ],
        'default' => [
            'host'     => env('REDIS_HOST', 'localhost'),
            'password' => env('REDIS_PASSWORD', null),
            'port'     => env('REDIS_PORT', 6379),
            'database' => 0,
        ],
    ],

对于 phpredis 客户端(自 Laravel 5.3 起可用):

'redis' => [
    'cluster' => false,
    'client'  => 'phpredis',
    'default' => [
        'host'     => env('REDIS_HOST', 'localhost'),
        'password' => env('REDIS_PASSWORD', null),
        'port'     => env('REDIS_PORT', 6379),
        'database' => 0,
        'prefix'   => 'YOUR_PREFIX_HERE:',
    ],
],