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 中删除。这完全是我的错。也许有人会节省时间。
我将数据库用于队列。
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 中删除。这完全是我的错。也许有人会节省时间。