2017-07-27 114 views
0

我在本地环境中为Laravel 4.3使用redis作为电子邮件队列。我最近升级到Laravel 5.4,当我尝试使用Redis的队列(默认)现:异常'BadMethodCallException'带有消息'Method handleQueuedMessage does not exist。'

php artisan queue:listen 

我得到的输出语句的快速连续的,像这样:

Processing: [email protected] 

与错误每个日志文件:

exception 'BadMethodCallException' with message 'Method handleQueuedMessage does not exist.' in C:\xampp\htdocs\explore\vendor\laravel\framework\src\Illuminate\Support\Traits\Macroable.php:74 
Stack trace: 
#0 C:\xampp\htdocs\explore\vendor\laravel\framework\src\Illuminate\Queue\Jobs\Job.php(69): Illuminate\Mail\Mailer->__call('handleQueuedMes...', Array) 
#1 C:\xampp\htdocs\explore\vendor\laravel\framework\src\Illuminate\Queue\Jobs\Job.php(69): Illuminate\Mail\Mailer->handleQueuedMessage(Object(Illuminate\Queue\Jobs\RedisJob), Array) 
#2 C:\xampp\htdocs\explore\vendor\laravel\framework\src\Illuminate\Queue\Worker.php(317): Illuminate\Queue\Jobs\Job->fire() 
#3 C:\xampp\htdocs\explore\vendor\laravel\framework\src\Illuminate\Queue\Worker.php(267): Illuminate\Queue\Worker->process('redis', Object(Illuminate\Queue\Jobs\RedisJob), Object(Illuminate\Queue\WorkerOptions)) 
#4 C:\xampp\htdocs\explore\vendor\laravel\framework\src\Illuminate\Queue\Worker.php(224): Illuminate\Queue\Worker->runJob(Object(Illuminate\Queue\Jobs\RedisJob), 'redis', Object(Illuminate\Queue\WorkerOptions)) 
#5 C:\xampp\htdocs\explore\vendor\laravel\framework\src\Illuminate\Queue\Console\WorkCommand.php(102): Illuminate\Queue\Worker->runNextJob('redis', 'default', Object(Illuminate\Queue\WorkerOptions)) 
#6 C:\xampp\htdocs\explore\vendor\laravel\framework\src\Illuminate\Queue\Console\WorkCommand.php(86): Illuminate\Queue\Console\WorkCommand->runWorker('redis', 'default') 
#7 [internal function]: Illuminate\Queue\Console\WorkCommand->fire() 
#8 C:\xampp\htdocs\explore\vendor\laravel\framework\src\Illuminate\Container\BoundMethod.php(30): call_user_func_array(Array, Array) 
#9 C:\xampp\htdocs\explore\vendor\laravel\framework\src\Illuminate\Container\BoundMethod.php(87): Illuminate\Container\BoundMethod::Illuminate\Container\{closure}() 
#10 C:\xampp\htdocs\explore\vendor\laravel\framework\src\Illuminate\Container\BoundMethod.php(31): Illuminate\Container\BoundMethod::callBoundMethod(Object(Illuminate\Foundation\Application), Array, Object(Closure)) 
#11 C:\xampp\htdocs\explore\vendor\laravel\framework\src\Illuminate\Container\Container.php(539): Illuminate\Container\BoundMethod::call(Object(Illuminate\Foundation\Application), Array, Array, NULL) 
#12 C:\xampp\htdocs\explore\vendor\laravel\framework\src\Illuminate\Console\Command.php(182): Illuminate\Container\Container->call(Array) 
#13 C:\xampp\htdocs\explore\vendor\symfony\console\Command\Command.php(264): Illuminate\Console\Command->execute(Object(Symfony\Component\Console\Input\ArgvInput), Object(Illuminate\Console\OutputStyle)) 
#14 C:\xampp\htdocs\explore\vendor\laravel\framework\src\Illuminate\Console\Command.php(168): Symfony\Component\Console\Command\Command->run(Object(Symfony\Component\Console\Input\ArgvInput), Object(Illuminate\Console\OutputStyle)) 
#15 C:\xampp\htdocs\explore\vendor\symfony\console\Application.php(869): Illuminate\Console\Command->run(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput)) 
#16 C:\xampp\htdocs\explore\vendor\symfony\console\Application.php(223): Symfony\Component\Console\Application->doRunCommand(Object(Illuminate\Queue\Console\WorkCommand), Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput)) 
#17 C:\xampp\htdocs\explore\vendor\symfony\console\Application.php(130): Symfony\Component\Console\Application->doRun(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput)) 
#18 C:\xampp\htdocs\explore\vendor\laravel\framework\src\Illuminate\Foundation\Console\Kernel.php(122): Symfony\Component\Console\Application->run(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput)) 
#19 C:\xampp\htdocs\explore\artisan(36): Illuminate\Foundation\Console\Kernel->handle(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput)) 
#20 {main} 

我做了一个谷歌搜索这个方法,并发现它无处。我的电子邮件队列功能正常,但我为什么会出现此消息而丢失。有没有人遇到过这个问题可以解决这个问题?

这里是我的相关应用程序/ database.php中:

<?php 


    /* 
    |-------------------------------------------------------------------------- 
    | Redis Databases 
    |-------------------------------------------------------------------------- 
    | 
    | Redis is an open source, fast, and advanced key-value store that also 
    | provides a richer set of commands than a typical key-value systems 
    | such as APC or Memcached. Laravel makes it easy to dig right in. 
    | 
    */ 

    'redis' => [ 

     'client' => 'predis', 

     'default' => [ 
      'host' => env('REDIS_HOST', '127.0.0.1'), 
      'password' => env('REDIS_PASSWORD', null), 
      'port' => env('REDIS_PORT', 6379), 
      'database' => 0, 
     ], 

    ], 

和我的相关应用程序/ queue.php:

<?php 

return [ 

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

    'connections' => [ 

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

    ], 

    /* 
    |-------------------------------------------------------------------------- 
    | Failed Queue Jobs 
    |-------------------------------------------------------------------------- 
    | 
    | These options configure the behavior of failed queue job logging so you 
    | can control which database and table are used to store the jobs that 
    | have failed. You may change them to any database/table you wish. 
    | 
    */ 

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

]; 

及相关.ENV:

QUEUE_DRIVER=redis 

REDIS_HOST=127.0.0.1 
REDIS_PASSWORD=null 
REDIS_PORT=6379 

提前致谢!

+1

升级后你运行'composer dumpautoload'还是改变了什么? – Frondor

+0

是的,先生,自升级以来,我多次运行作曲家转储自动加载。感谢您的建议。 –

+0

请包括您的相关队列代码,只是倾销随机配置文件在这里不会得到你的帮助。选择配置的哪些部分是必不可少的 – milo526

回答

0

这是涉及到以下Laravel框架线程的问题: https://github.com/laravel/framework/issues/9881 https://github.com/laravel/framework/issues/11892

具体来说,有一个与以前的电子邮件无法正确渲染,并继续通过Redis的队列尝试而没有接收指令的问题在标记为失败之前尝试有限的次数。

以下命令解决它:

php artisan queue:work --daemon --tries=1 

输出:

[2017-07-28 06:48:13] Processing: [email protected] 
[2017-07-28 06:48:13] Failed:  [email protected] 

希望这将帮助其他人谁遇到这种情况。

相关问题