laravel队列不适用于自定义类

时间:2019-07-17 08:49:27

标签: laravel laravel-5.8 laravel-queue

我将数据库用于队列。 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');
    }
}

队列表结构:

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;

如何解决此问题?

1 个答案:

答案 0 :(得分:0)

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