Laravel 5.4是记录工作的解决方案



我在项目中使用了Laravel 5.4和MySQL。

远程服务器是PHP服务器7

用户将记录保存到数据库时,它还创建了一个队列作业来通知相关公司官员。我的代码在控制器文件中

    foreach($audit->mailusers AS $mailuser){
        $this->dispatch(new SendAuditEmail($audit->id, $mailuser->name, $mailuser->email));
    }

我正在为队列驱动程序使用数据库。我的意思是写在.env文件中:

QUEUE_DRIVER=database

您知道,如果您使用的是"数据库"而不是" redis"或其他队列驱动程序,则数据库中必须有"作业"表:

CREATE TABLE `jobs` (
   `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
   `queue` varchar(191) 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,
 PRIMARY KEY (`id`),
 KEY `jobs_queue_reserved_at_index` (`queue`,`reserved_at`)
) ENGINE=MyISAM AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4 
COLLATE=utf8mb4_unicode_ci;

您也知道,如果要处理失败的作业,数据库中应该还有一个名为" failed_jobs"的表:

CREATE TABLE `failed_jobs` (
  `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
  `connection` text COLLATE utf8mb4_unicode_ci NOT NULL,
  `queue` text COLLATE utf8mb4_unicode_ci NOT NULL,
  `payload` longtext COLLATE utf8mb4_unicode_ci NOT NULL,
  `exception` longtext COLLATE utf8mb4_unicode_ci NOT NULL,
  `failed_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

要创建" Failed_jobs"表( source (,首先您必须运行工匠命令:

php artisan queue:failed-table

此命令将在数据库 Migrations文件夹中创建一个迁移PHP文件

然后,通过运行迁移命令,您可以创建一个Failed_jobs表:

php artisan migrate

处理工作表中的作业表:

php artisan queue:work

排队工人的行为是这样的:

1-如果"作业"表中的作业失败,请将其保存为"失败_jobs"表,然后从"作业"表中删除

2-如果工作成功完成,只需从"工作"表中删除。不要再保存在任何地方,只需删除这项工作即可。

最后,我的问题是:如果队列工作者成功完成了一项工作,那么无论如何都有将此作业记录保存到名为" poolted_jobs"的数据库中的任何表格。

,因为对我来说,重要的是要说: "邮寄给安德森先生的邮寄由队列工人发送给2018年1月25日15:42:20"

laravel在工作之前,之后和失败的工作发动了工作事件。为了您需要,您可以在事件后注册一个侦听器,并存储成功运行的工作记录。

在服务提供商的引导方法中:

   Queue::after(function (JobProcessed $event) {
        // $event->connectionName
        // $event->job
        // $event->job->payload()
    });

最新更新