And*_*der 5 php queue laravel laravel-5 laravel-5.4
我在我的项目中使用 Laravel 5.4 和 MySQL。
远程服务器是 PHP Server 7
当用户将记录保存到数据库时,它也会创建一个队列作业来通知相关公司官员。我的代码在控制器文件中
    foreach($audit->mailusers AS $mailuser){
        $this->dispatch(new SendAuditEmail($audit->id, $mailuser->name, $mailuser->email));
    }
我正在为 QUEUE DRIVER 使用数据库。我的意思是它写在 .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),首先您必须运行 artisan 命令:
php artisan queue:failed-table
此命令将在 database\migrations 文件夹中创建一个迁移 php 文件
然后通过运行 migrate 命令,您可以创建一个 failed_jobs 表:
php artisan migrate
要处理作业表中的作业:
php artisan queue:work
队列工作者的行为是这样的:
1- 如果“jobs”表中的作业失败,则将其保存到“failed_jobs”表并从“jobs”表中删除
2- 如果作业成功完成,只需从“作业”表中删除。不要在任何地方再次保存它,只需删除此作业。
最后,我的问题是:如果队列工作人员成功完成了一项工作,是否可以将此工作记录保存到数据库中名为“已完成_jobs”的任何其他表中。
因为,对我来说,能够这样说很重要: “队列工作人员在 25.01.2018 15:42:20 发送给安德森先生的邮件”
小智 3
Laravel 会针对之前、之后和失败的作业触发作业事件。根据您的需要,您可以注册事件后监听器并存储已成功运行的作业的记录。
在服务提供商的启动方法中:
   Queue::after(function (JobProcessed $event) {
        // $event->connectionName
        // $event->job
        // $event->job->payload()
    });
| 归档时间: | 
 | 
| 查看次数: | 2351 次 | 
| 最近记录: |