【问题标题】:Laravel Queue Work Not Behaving As ExpectedLaravel 队列工作未按预期运行
【发布时间】:2018-01-17 11:33:05
【问题描述】:

情景

我正在关注 youtube 上关于如何设置队列工作者的教程,同时阅读最新的 laravel 文档。我已经正确地遵循了每一步,直到我现在必须运行工人。

但是,运行 worker 会执行 255 次作业。我不确定它是否失败“但我想这是因为没有发送电子邮件”,但什么也没发生。

我的问题类似这样:https://laracasts.com/discuss/channels/laravel/laravel-54-event-queue-255-attemps-and-freeze-no-listener-actions-done

但该用户未能正确回答他们自己的问题。

我的文件

身份验证控制器:

    public function register(Request $request)
    {
        $validatedData = $request->validate([
            'full_name' => 'required',
            'email'     => 'required|unique:users',
            'password'  => 'required|confirmed',
        ]);

        $user = User::create($validatedData);

        //Authenticate the user
        Auth::login($user);

        //Queue the email
        EmailNewUsers::dispatch();

        return 'Email Sent!';

        //Redirect User
//        return redirect('admin/dashboard');
    }

EmailNewUsers 工作:

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

    /**
     * Create a new job instance.
     *
     * @return void
     */
    public function __construct()
    {
        //
    }

    /**
     * Execute the job.
     *
     * @return void
     */
    public function handle()
    {
        MailController::UserRegistered();
    }
}

邮件控制器

class MailController extends Controller
{
    public static function UserRegistered()
    {
        Mail::to(Auth::user())->send(new UserRegistered());
    }
}

UserRegistered Mailable

class UserRegistered extends Mailable
{
    use Queueable, SerializesModels;

    /**
     * Create a new message instance.
     *
     * @return void
     */
    public function __construct()
    {
        //
    }

    /**
     * Build the message.
     *
     * @return $this
     */
    public function build()
    {
        return $this->view('emails.UserRegistered');
    }
}

问题

为什么队列工作者运行一个作业 255 次然后什么都不做......?

编辑

所以我什么都不做就让它工作了..刚出去吃午饭回来时精神焕发,并且成功了......大约尝试了 10 次,然后又回到了同样的旧错误。

这一次我尝试制作一个名为“TestJob”的新作业来调度,我按照教程设置了测试作业,它最初工作,然后 30 秒后当我重试相同的作业时它停止工作。

注意第一次处理的时间 -> 处理然后再次出错。我不确定这是否会有所帮助,但我认为应该添加它。

【问题讨论】:

    标签: php laravel queue jobs


    【解决方案1】:

    MailController 有错误,appendfailed_job 表并查看错误日志

    【讨论】:

    • 我已经这样做了,在我重新运行所有内容后它没有显示任何内容。此外,除非我运行php artisan migrate:fresh,否则队列不会采取任何进一步的行动
    • 你确定类 UserRegistered 存在吗?
    • 是的,我确定它存在,它是可邮寄的
    • 也许你需要配置.env文件MAIL_*部分
    • 邮件已配置,我在配置que之前向mailtrap发送了虚拟电子邮件,没有队列一切正常,只是当我尝试使用它时,没有任何效果。
    【解决方案2】:

    如果您不希望队列尝试 255 次,则需要定义它必须尝试的次数。

    php artisan queue:work --tries=3
    

    如果 Job 在 3 次尝试后失败,则会在“failed_jobs”表中插入一行。在“异常”列中查找错误。

    如果您没有“failed_jobs”,请运行此命令

    php artisan queue:failed-table
    

    然后运行

    php artisan migrate
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-05
      • 2014-03-26
      • 2020-04-26
      • 1970-01-01
      • 2020-03-07
      相关资源
      最近更新 更多