Laravel queue:listen queue:work 不工作
Laravel queue:listen queue:work not working
我正在尝试在后台发送电子邮件以减少服务器响应时间。
我使用 table 和 failed_jobs table 创建了工作
php artisan queue:table
和 php artisan queue:failed-table
命令。并在 .env 文件中设置 QUEUE_DRIVER=database
。
当我执行以下代码时,它会在作业 table.
中创建一个作业
\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:listen
或php artisan queue:work
命令时。它既不处理作业 table 中保存的作业,也不在控制台上提供任何输出。
然而,当我检查作业时 table,作业的尝试字段不断增加。但是作业没有得到处理。
另外,当我使用以下代码直接发送邮件时,即没有将其添加到队列中。邮件发送没有任何问题。
\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');
});
我明白了,问题出在 Eloquent 关系上。
查询电子邮件时,需要序列化 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);
我正在尝试在后台发送电子邮件以减少服务器响应时间。
我使用 table 和 failed_jobs table 创建了工作
php artisan queue:table
和 php artisan queue:failed-table
命令。并在 .env 文件中设置 QUEUE_DRIVER=database
。
当我执行以下代码时,它会在作业 table.
中创建一个作业\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:listen
或php artisan queue:work
命令时。它既不处理作业 table 中保存的作业,也不在控制台上提供任何输出。
然而,当我检查作业时 table,作业的尝试字段不断增加。但是作业没有得到处理。
另外,当我使用以下代码直接发送邮件时,即没有将其添加到队列中。邮件发送没有任何问题。
\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');
});
我明白了,问题出在 Eloquent 关系上。 查询电子邮件时,需要序列化 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);