Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >将队列中已处理的作业存储在laravel中

将队列中已处理的作业存储在laravel中
EN

Stack Overflow用户
提问于 2020-04-13 11:35:37
回答 1查看 1K关注 0票数 1

我在队列上工作,试图找到一种方法在表'processed_jobs‘中记录已处理的作业,就像失败的作业存储在表' failed _ jobs’中一样,这是自动发生的。我正在使用'database‘进行队列连接。我尝试了两种不同的方法。首先,我尝试在另一个命令文件'WorkerCommand‘中扩展WorkCommand ('Illuminate\Queue\Console\WorkCommand')。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<?php

namespace App\Console\Commands;

use Illuminate\Queue\Console\WorkCommand;
use Illuminate\Contracts\Cache\Repository as Cache;
use Illuminate\Queue\Worker;
use Illuminate\Queue\Events\JobFailed;
use Illuminate\Queue\Events\JobProcessed;
use Illuminate\Queue\Events\JobProcessing;

class WorkerCommand extends WorkCommand
{
   protected function listenForEvents()
    {
        $this->laravel['events']->listen(JobProcessing::class, function ($event) {
            $this->writeOutput($event->job, 'starting');
        });

        $this->laravel['events']->listen(JobProcessed::class, function ($event) {
            $this->writeOutput($event->job, 'success');

            \DB::table('processed_jobs')->insert([
               'connection' => $event->connectionName,
               'queue' => $event->job->getQueue(),
               'payload' => $event->job->payload(),
               'processed_at' => \Carbon\Carbon::Now()
            ]);
        });

        $this->laravel['events']->listen(JobFailed::class, function ($event) {
            $this->writeOutput($event->job, 'failed');

            $this->logFailedJob($event);
        });
    }
}

它没有起作用。然后我尝试使用作业事件。按照this文档的建议,在我的AppServiceProvider的引导功能中,我尝试了:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    public function boot()
    {
        Queue::after(function (JobProcessed $event) {
            \DB::table('processed_jobs')->insert([
               'connection' => $event->connectionName,
               'queue' => $event->job->getQueue(),
               'payload' => $event->job->payload(),
               'processed_at' => \Carbon\Carbon::Now()
            ]);
        });
    }

这也不起作用。我找不到其他的东西。提前谢谢。以下是作业文件:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<?php

namespace App\Jobs;

use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\SerializesModels;

class ProcessSleep implements ShouldQueue
{
    use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;

    /**
     * Create a new job instance.
     *
     * @return void
     */
    public function __construct()
    {

    }

    /**
     * Execute the job.
     *
     * @return void
     */
    public function handle()
    {
        sleep(10);
    }
}

将作业添加到队列的函数:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    public function dispatchSleep(){
        ProcessSleep::dispatch();

        return response()->json(['message'=>'Process added to queue']);
    }
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-04-13 16:30:51

这是因为'processed_jobs‘表中的'payload’列是长文本,但$event->job->payload返回的是object。因此,我使用json_encode修复了它。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public function boot()
{
    Queue::after(function (JobProcessed $event) {
        \DB::table('processed_jobs')->insert([
           'connection' => $event->connectionName,
           'queue' => $event->job->getQueue(),
           'payload' => json_encode($event->job->payload()),
           'processed_at' => \Carbon\Carbon::Now()
        ]);
    });
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61187015

复制
相关文章
Laravel7中Redis队列的使用
首先我们需要在配置文件中配置默认队列驱动为Redis,队列配置文件是config/queue.php:
Lansonli
2021/10/09
9900
laravel 中字段格式处理
这里举一个简单的示例,在laravel 中,我们应当这样做: 在对应的Order 模型里定义
句小芒
2022/12/29
5040
基于 Redis 在 Laravel 中实现消息队列及底层源码探究
对应的基本工作流程是生产者(业务代码)先将消息数据推送到队列,然后再通过其他的处理进程来消费队列中的消息数据,从而实现生产者和消费者之间的解耦。因此,消息队列非常适用于一些需要异步执行的耗时操作(比如邮件发送、文件上传),或者业务临时的高并发操作(比如秒杀、消息推送),对于提升系统性能和负载非常有效,尤其是 PHP 这种本身不支持并发编程的语言,是实现异步编程的不二之选。
学院君
2021/01/08
6.4K0
Laravel中利用队列发送邮件的方法示例
前言 本文主要给大家介绍了关于Laravel中队列发送邮件的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍: 批量处理任务的场景在我们开发中是经常使用的,比如邮件群发,消息通知,短信,秒杀等等,我们需要将这个耗时的操作放在队列中来处理,从而大幅度缩短Web请求和相应的时间。下面讲解下Laravel中队列的使用
用户2323866
2021/07/01
1.4K0
日期及时间处理包 Carbon 在 Laravel 中的简单使用[通俗易懂]
在编写 PHP 应用时经常需要处理日期和时间,这篇文章带你了解一下 Carbon – 继承自 PHP DateTime 类的 API 扩展,它使得处理日期和时间更加简单。Laravel 中默认使用的时间处理类就是 Carbon。 1 安装 通过 Composer 来安装 Carbon:
全栈程序员站长
2022/08/09
5.5K0
Flask session的默认将数据存储在cookie中的方式
一般服务的session数据是在cookie处存储session的id号,然后通过id号到后端中查询session的具体数据。 为了安全,一般session数据都是存储在后端的数据库中。 但是也有其他的存储方式,如下:
Devops海洋的渔夫
2019/12/16
4.5K0
Flask session的默认将数据存储在cookie中的方式
Laravel中简单使用队列加快访问速度
总而言之,队列就是在后台执行一些耗时的任务,从而让前台访问速度加快。比较典型的例子就是发邮件。特别是同一时间发送多个邮件时。
无道
2019/11/13
1.6K0
Laravel中简单使用队列加快访问速度
消息队列在VFP中的应用
会员注册成功之后,发送成功的短信\邮件,传统的做法就是在会员注册成功的程序上面做一个发送短信的代码,增加发送邮件的代码,
加菲猫的VFP
2021/08/16
1K0
在 Laravel 中编写高级的 Artisan 命令
在上一篇教程中,学院君向大家介绍了什么是 Artisan 命令,系统内置的 Artisan 命令,以及如何编写一个简单的 Artisan 命令。我们完全可以将命令行看作与 Web 应用同等的控制台应用(实际上,Laravel 底层也是这么做的),它具备自己的路由、Kernel、输入、控制器(命令类)、输出。因此,在这篇教程中,我们将更进一步,一起来看下如何编写更加高级的 Artisan 命令,比如带输入参数、选项,以及能够与用户互动,输出图表/进度条的 Artisan 命令。
学院君
2021/01/08
8.3K0
在Cookie中存储对象
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/huyuyang6688/article/details/46955119
DannyHoo
2018/09/13
3.8K0
Laravel 事件处理(event)+ 队列使用(queue)
该脚本定义了一下优化参数,执行redis中名字为FMock的队列,不输出任何信息,3秒一次,失败后3秒重新执行,最多执行3次。
躺平程序员老修
2023/09/05
5330
14. Flask session的默认将数据存储在cookie中的方式
一般服务的session数据是在cookie处存储session的id号,然后通过id号到后端中查询session的具体数据。为了安全,一般session数据都是存储在后端的数据库中。但是也有其他的存储方式,如下:
Devops海洋的渔夫
2022/01/14
2.2K0
14. Flask session的默认将数据存储在cookie中的方式
将文本文件的内容存储在DataSet中的方法总结
本文介绍了一种将文本文件的内容存储在DataSet中的方法,包括读取文件、处理数据、创建表、填充数据和解析记录等步骤。该方法包括读取文件、处理数据、创建表、填充数据和解析记录等步骤。
彭泽0902
2018/01/04
3.4K0
在JavaScript中的数据结构(队列)
理所有的任务,它被称为事件循环。浏览器要负责多个任务,如渲染HTML,执行JavaScript代码,处理用户交互(用户输入、鼠标点击等),执行和处理异步请求。
肥晨
2023/06/27
3010
在JavaScript中的数据结构(队列)
在 Laravel 应用中构建 GraphQL API
昨天我们学习了 在 Visual Code 中搭建 Laravel 环境,现在我们来学习 Facebook 的 GraphQL 。
猿哥
2019/07/24
3.4K0
RabbitMQ死信队列在SpringBoot中的使用
nack()与reject()的区别是:reject()不支持批量拒绝,而nack()可以.
喜欢天文的pony站长
2020/06/26
1.5K0
在JavaScript中的数据结构(队列)
当我们在浏览器中打开新标签时,就会创建一个任务队列。这是因为每个标签都是单线程处 理所有的任务,它被称为事件循环。浏览器要负责多个任务,如渲染HTML,执行JavaScript代码,处理用户交互(用户输入、鼠标点击等),执行和处理异步请求。
肥晨
2023/08/18
3100
在JavaScript中的数据结构(队列)
RabbitMQ死信队列在SpringBoot中的使用
nack()与reject()的区别是:reject()不支持批量拒绝,而nack()可以.
喜欢天文的pony站长
2020/06/29
1.1K0
RabbitMQ死信队列在SpringBoot中的使用
点击加载更多

相似问题

laravel中终端队列中的作业处理号

143

Laravel在队列中创建作业

21

Laravel队列作业如何将已删除的模型作为输入处理?

12

如何在Laravel中更改作业队列处理?

20

Laravel,在作业队列中嵌入图像

13
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文