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:',
],
],
我在同一台服务器 (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:',
],
],