首页 > 解决方案 > laravel queue not working from custom class

问题描述

Im use database for queue. php artisan queue:work not runned. If I add to queue from App\Models\Mail: ProcessMail::dispatch(['test' => 'test'); auto_increment value changed, but row does not exists in database, no errors in logs and no exception. If I try ProcessMail::dispatch(['test' => 'test'); in controller that's work fine: row creates to database. This is code of 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');
    }
}

Queue table structure:

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;

How can I fix this problem?

标签: laravellaravel-5.8laravel-queue

解决方案


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


推荐阅读