Laravel队列:监听队列:工作不正常

时间:2018-01-11 12:41:52

标签: php mysql laravel laravel-5.3 digital-ocean

我正在尝试在后台发送电子邮件以减少服务器响应时间。

我使用了创建了jobs表和failed_jobs表 php artisan queue:tablephp artisan queue:failed-table 命令。并在.env文件中设置QUEUE_DRIVER=database

当我执行以下代码时,它会在作业表中创建一个作业。

\Mail::later(5, 'email.new-friend-request', ['data'=>$friend_request], function($message) use (&$friend_request){
                    $message->to($friend_request->notifiable->email, $friend_request->notifiable->name)->from('info@example.com','ABC')->subject('New Friend Request');
                });

但是当我执行php artisan queue:listenphp artisan queue:work命令时。它既不处理作业表中保存的作业,也不提供控制台上的任何输出。

然而,当我检查作业表时,作业的尝试字段不断递增。但工作没有得到处理。

当我使用以下代码直接发送邮件时,即不将其添加到队列中。邮件发送没有任何问题。

\Mail::send('email.new-friend-request', ['data'=>$friend_request], function($message) use (&$friend_request){
                        $message->to($friend_request->notifiable->email, $friend_request->notifiable->name)->from('info@example.com','ABC')->subject('New Friend Request');
                    });

更新

我尝试发送没有任何数据的电子邮件,它也没有任何问题。 即

\Mail::later(5, 'email.new-friend-request', [], function($message) use (&$friend_request){
                        $message->to($friend_request->notifiable->email, $friend_request->notifiable->name)->from('info@example.com','ABC')->subject('New Friend Request');
                    });

1 个答案:

答案 0 :(得分:2)

我明白了,问题在于雄辩的关系。 当qued电子邮件时,需要序列化Eloquent模型对象。因此,一旦模型对象被序列化,那么就无法访问关系。

所以我只是试着加载模型关系,并使用toArray()方法将我的模型对象转换为数组,然后开始处理作业。

这是在致电

之前
\Mail::later(5, 'email.new-friend-request', ['data'=>$friend_request], function($message) use (&$friend_request){
                    $message->to($friend_request->notifiable->email, $friend_request->notifiable->name)->from('info@example.com','ABC')->subject('New Friend Request');
                });

我渴望加载$friend_request对象上的所有关系。

例如: -

$friend_request = FriendRequest::with('notifiable')->find($request_id);