laravel 自定义队列无法正常工作 class

laravel queue not working from custom class

我将数据库用于队列。 php artisan queue:work 未运行。 如果我从 App\Models\Mail 添加到队列: ProcessMail::dispatch(['test' => 'test'); auto_increment 值已更改,但数据库中不存在行,日志中没有错误,也没有异常。如果我在控制器中尝试 ProcessMail::dispatch(['test' => 'test'); 工作正常:行创建到数据库。 这是 ProcessMail 的代码:

<?php

namespace App\Jobs;

use Illuminate\Bus\Queueable;
use Illuminate\Queue\SerializesModels;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Log;

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

    private $mailData;

    /**
     * Create a new job instance.
     *
     * @param [] $mailData
     * @return void
     */
    public function __construct($mailData)
    {
        $this->mailData = $mailData;
        Log::info('job constructor');
    }

    /**
     * Execute the job.
     *
     * @return void
     */
    public function handle()
    {
        Log::info('job handle');
    }
}

队列table结构:

CREATE TABLE `jobs` (
  `id` bigint(20) UNSIGNED NOT NULL,
  `queue` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL,
  `payload` longtext COLLATE utf8mb4_unicode_ci NOT NULL,
  `attempts` tinyint(3) UNSIGNED NOT NULL,
  `reserved_at` int(10) UNSIGNED DEFAULT NULL,
  `available_at` int(10) UNSIGNED NOT NULL,
  `created_at` int(10) UNSIGNED NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

我该如何解决这个问题?

我发现了问题。我在 DB::beginTransaction(); 之后调用 ProcessMail::dispatch(['test' => 'test'); 并且因为我调试 - 我 运行 DB::rollback(); 所以创建的作业从 table 中删除。这完全是我的错。也许有人会节省时间。