Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/267.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Lavel 5.x,Redis队列生成大量日志_Php_Laravel 5_Redis_Queue_Broadcast - Fatal编程技术网

Php Lavel 5.x,Redis队列生成大量日志

Php Lavel 5.x,Redis队列生成大量日志,php,laravel-5,redis,queue,broadcast,Php,Laravel 5,Redis,Queue,Broadcast,我有一个项目是用Laravel和Redis队列设置的。应用程序配置为在收到消息时发送推送通知。一旦收到消息,它就会存储在数据库中,并生成推送: dispatch(新建CreateMessageNotification($message)) 项目正在使用Redis队列和服务提供程序。问题是,如果不执行以下命令,队列调度将不起作用: php artisan队列:工作redis——守护进程 但是,当我们运行这个命令时,应用程序开始生成下面的错误日志。似乎有些常规程序在某个地方被卡住了,我们无法弄清楚在

我有一个项目是用Laravel和Redis队列设置的。应用程序配置为在收到消息时发送推送通知。一旦收到消息,它就会存储在数据库中,并生成推送:

dispatch(新建CreateMessageNotification($message))

项目正在使用Redis队列和服务提供程序。问题是,如果不执行以下命令,队列调度将不起作用:

php artisan队列:工作redis——守护进程

但是,当我们运行这个命令时,应用程序开始生成下面的错误日志。似乎有些常规程序在某个地方被卡住了,我们无法弄清楚在哪里,为什么,如何?如果不运行此脚本,推送通知将不起作用。如果我们运行这个脚本,推送通知会延迟工作,并且会生成错误日志,日志大小在一个小时内达到GB。我们做错了什么

我们正在使用Redis/Predis:

'redis' => [
    'client' => 'predis',
    'cluster' => env('REDIS_CLUSTER', false),
    'default' => [
        'host' => env('REDIS_HOST', 'localhost'),
        'password' => env('REDIS_PASSWORD', null),
        'port' => env('REDIS_PORT', 6379),
        'database' => env('REDIS_DB', 0),
        'timeout' => 15.0,
    ],
],
对于广播,我们使用Pusher:

'default' => env('BROADCAST_DRIVER', 'pusher'),
对于队列,我们使用Redis:

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

QUEUE_DRIVER=redis
'default' => env('CACHE_DRIVER', 'file'),

CACHE_DRIVER=redis
对于缓存,我们使用Redis:

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

QUEUE_DRIVER=redis
'default' => env('CACHE_DRIVER', 'file'),

CACHE_DRIVER=redis
CreateMessageNotification

<?php
namespace App\Jobs\EventHandlers;

use App\Events\Notifications\NewMessageCreatedEvent;
use App\Repositories\UserDevicesRepository;
use Event;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\SerializesModels;

class CreateMessageNotification implements ShouldQueue
{
    use InteractsWithQueue, Queueable, SerializesModels;

    private $message;

    public function __construct($message)
    {
        $this->message = $message;
    }

    public function handle()
    {
        Event::fire(new NewMessageCreatedEvent($this->message));
    }
}

对我来说,有效的方法是从队列中删除所有失败的作业(在再次尝试重试后):

重新运行队列:

php artisan queue:work redis --daemon
此外,我还不得不摆脱打给Pusher的电话,这些电话都没能让这一切正常进行

php artisan queue:work redis --daemon