2016-12-25 101 views
4

我有Laravel 5项目。这是多租户项目,所以我有一个包含多个数据库的文件夹项目。与多个数据库运行laravel队列

当我使用php artisan queue:listen时,它只适用于当前的数据库设置。我使用database队列驱动程序,因此每个租户都有自己的通知表。如何设置队列侦听器来检查所有数据库作业?

回答

4

如果您想继续使用database驱动程序,我会建议设置另一个数据库,其中包含所有排队的作业和失败的作业。

虽然它不在配置文件中,但在看完代码之后,它看起来应该可以在您的队列配置中添加一个connection参数,然后队列将与由该连接指定的数据库。

因此,在你config/database.php,定义您的队列数据库的新连接:

'connections' => [ 
    // your existing connections 

    'queue' => [ 
     'driver' => 'mysql', 
     'database' => 'your-queue-database', 
     // rest of connection information (host, port, etc) 
    ], 
], 

然后,在你config/queue.php,告诉你的数据库队列使用新的连接:

'connections' => [ 
    'database' => [ 
     'driver' => 'database', 
     'connection' => 'queue', // connection name from database config 
     'table' => 'jobs', 
     'queue' => 'default', 
     'retry_after' => 90, 
    ], 
] 

的其他选项将转移到另一个队列驱动程序。设置redis,sqs或者beanstalk。

+0

嗨,感谢您的答案..这两个工作,但是当我使用'redis'如何看到当前挂起的工作或失败的工作就像'数据库'。所以我知道是否有错误或某个工作没有按预期工作?顺便说一句,我使用laravel伪造服务器设置。 – martiendt

+0

@martiendt无论您使用哪种类型的队列,失败的作业在超过队列工作者允许的最大尝试次数时都会报告给数据库中的“failed_jobs”表。 – patricus

+0

所以当我选择使用redis时,我需要设置我的队列数据库呢?好的,谢谢@patricus我会试试看 – martiendt