无法调度Laravel Queue

时间:2017-10-04 02:28:59

标签: php laravel message-queue jobs

我目前正在尝试使用Laravel 5.4中的队列发送邮件,以加快一些请求。但出于某种原因,我只是不会解决。

我的工作如下:

<?php

namespace App\Jobs;

use Illuminate\Bus\Queueable;
use Illuminate\Support\Facades\Mail;
use Illuminate\Queue\SerializesModels;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;

class NotificationEmail implements ShouldQueue
{
    use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;

    protected $doer, $does, $user;

    /**
     * Create a new job instance.
     *
     * @param  Podcast  $podcast
     * @return void
     */
    public function __construct($doer, $does, $user)
    {
        $this->doer = $doer;
        $this->does = $does;
        $this->user = $user;
    }

    /**
     * Execute the job.
     *
     * @param  AudioProcessor  $processor
     * @return void
     */
    public function handle()
    {
        $actions = [
            'accepted.invite' => 'accepted your invited.',
            'accepted.requesting' => 'accepted your request.',
            'denied.invite' => 'denied your invite.',
            'denied.requesting' => 'denied your request'
        ];
        Mail::send('emails.notification', [
            'doer' => $this->does,
            'action' => $actions[$this->action]
        ], function ($m)  {
            $m->from('noreply@bigriss.com', 'Bigriss');

            $m->to("myemail@gmail.com", 'Shawn')->subject('New Notification');

            echo "SENT";
        });
    }
}

通过以下方式在另一个班级发送:

NotificationEmail::dispatch($doer, $does, $user);

收听队列php artisan queue:listen后,一旦我分派作业,听众就会无休止地试图解决句柄功能。我收到了消息&#34; SENT&#34;但是电子邮件永远不会被发送(正如我在电子邮件提供商处看到的那样)并且队列实际上从未被删除,尝试计数只会无限期地上升。我在这里错过了什么吗?这不是队列的好处吗?

1 个答案:

答案 0 :(得分:0)

您正在将字符串传递到minus函数中,并且您在关闭时缺少变量。

如果您有匿名函数,则需要使用and not传入任何额外的变量。我在handle方法的任何地方都没有看到to变量。它需要作为单独的变量传递,因为你不能使用use将它传递给闭包。

现在你有

$user

字面意思是将其解释为一个字符串,表示 $ user-&gt;电子邮件,因为你没有传递任何内容。(旁注:这里真的没有理由使用它,除此之外对于带有文件路径等的内联变量。您不需要带有此字符串的内联变量。)

您需要将其更改为

$this->user

您可能需要考虑使用Laravel Dusk之类的内容来调试您的队列,logging以便更好地控制这一点,而不是只是在浏览器中查看“SENT”。

此外,考虑清理您的网站地址,因为您要从中发布源代码。