TP6队列与延时队列

news2025/1/20 10:48:53

安装

在此我就不再略过TP6的项目创建过程了,大致就是安装composer工具,安装成功以后,再使用composer去创建项目即可。

think-queue 安装

composer require topthink/think-queue

项目中添加驱动配置

我们需要在安装好的config下找到 queue.php

<?phpreturn [

'default' => 'redis',

'connections' => [

'sync' => [

'type' => 'sync',

],

'database' => [

'type' => 'database',

'queue' => 'default',

'table' => 'jobs',

'connection' => null,

],

'redis' => [

'type' => 'redis',

'queue' => 'default',

'host' => '127.0.0.1',

'port' => 6379,

'password' => '',

'select' => 4,

'timeout' => 0,

'persistent' => false,

],

],

'failed' => [

'type' => 'none',

'table' => 'failed_jobs',

],

];

生产者

<?php

namespace app\controller;

use app\BaseController;

use think\facade\Queue;

class Index extends BaseController

{

publicfunction queue()

{

//当前任务将由哪个类来负责处理。

//当轮到该任务时,系统将生成一个该类的实例,并默认调用其 fire 方法$jobHandlerClassName = 'app\Job\Order';

//当前任务归属的队列名称,如果为新队列,会自动创建

//php think queue:work --queue orderJobQueue

//php think queue:work --queue orderJobQueue --daemon$jobQueueName = "orderJobQueue";

//数组数据$orderData = [

'id' => uniqid(),

'time' => time(),

'message' => 'later message83'

];

//将该任务推送到消息队列,等待对应的消费者去执行

//这里只是负责将数据添加到相应的队列名称的队列里,消费者与生产者并无联系

//立即执行$isPushed = Queue::push($jobHandlerClassName, $orderData, $jobQueueName);

//延迟10秒后执行

//$isPushed = Queue::later(10, $jobHandlerClassName, $orderData, $jobQueueName);if ($isPushed !== false) {

echodate('Y-m-d H:i:s') . " 队列添加成功";

} else {

echo '队列添加失败';

}

}

}

消费者

<?php

namespace app\Job;

use think\facade\Log;

use think\queue\Job;

/**

* @Title: app\task\job$Order

* @Package package_name

* @Description: todo(测试订单消费者)

* @author Jack

*/class Order

{

/**

* @Title: fire

* @Description: todo(fire方法是消息队列默认调用的方法)

* @param Job $job

* @param array $data

* @author Jack

* @throws

*/publicfunction fire(Job $job, array$data)

{

//有些消息在到达消费者时,可能已经不再需要执行了$isJobStillNeedToBeDone = $this->checkDatabaseToSeeIfJobNeedToBeDone($data);

if(!$isJobStillNeedToBeDone){

$job->delete();

return;

}

$jobId = $job->getJobId();

$isJobDone = $this->orders($data, $jobId);

if ($isJobDone) {

//如果任务执行成功,记得删除任务$job->delete();

} else {

//通过这个方法可以检查这个任务已经重试了几次了if ($job->attempts() > 3){

Log::error('试了3次了');

$job->delete();

//也可以重新发布这个任务

//print("<info>Hello Job will be availabe again after 2s."."</info>\n");

//$job->release(2); //$delay为延迟时间,表示该任务延迟2秒后再执行 }

}

}

/**

* @Title: checkDatabaseToSeeIfJobNeedToBeDone

* @Description: todo(有些消息在到达消费者时,可能已经不再需要执行了)

* @param array $data

* @return boolean

* @author Jack

* @throws

*/privatefunction checkDatabaseToSeeIfJobNeedToBeDone($data)

{

returntrue;

}

/**

* @Title: orders

* @Description: todo(数据处理)

* @param array $data

* @author Jack

* @throws

*/publicfunction orders(array$data, $jobId)

{

//对订单进行数据库操作或其他等等Log::info(date('Y-m-d H:i:s') . ' - data:' . json_encode($data));

returntrue;

}

}

服务器执行常驻命令

php think queue:work --queue orderJobQueue

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/152117.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Solon v1.12.1 发布,已累计 10000+ 次提交

一个更现代感的 Java 应用开发框架&#xff1a;更快、更小、更自由。没有 Spring&#xff0c;没有 Servlet&#xff0c;没有 JavaEE&#xff1b;独立的轻量生态。主框架仅 0.1 MB。 Controller public class App {public static void main(String[] args) {Solon.start(App.cl…

leetcode刷题精讲————17.电话号码的字母组合

力扣https://leetcode.cn/problems/letter-combinations-of-a-phone-number/description/ 这道题要用到多叉树遍历、回溯、递归、排列组合等相关知识&#xff0c;算是比较经典的例题了&#xff0c;掌握它的核心思想就可以解决这一大类问题。 首先&#xff0c;2~9的数字对应不同…

JS 安全策略 101

依赖审计 依赖审计其实就是利用 npm 或是 yarn 自带的一个 audit 命令检测 node_module 里存在的一些具有安全隐患的依赖项。我习惯用yarn audit, 所以给大家放了张自己博客的 yarn 审计结果。这里显示&#xff1a;一个叫 trim 的包太老了&#xff0c;有很高的安全风险。 有风…

【数据结构初阶】5. 栈和队列

栈 1.1 栈的概念及结构 栈&#xff1a;一种特殊的线性表&#xff0c;其只允许在固定的一端进行插入和删除元素操作。**进行数据插入和删除操作的一端 称为栈顶&#xff0c;另一端称为栈底。**栈中的数据元素遵守后进先出LIFO&#xff08;Last In First Out&#xff09;的原则…

win7安装onenote2016时碰到30094-1011(0)的 问题

安装办法用途【1】中所有的更新【1】中下载IE11的依赖IE11360软件管家解决OneNote的登录界面不显示问题微软常用运行库360软件管家kernalbase.dll等文件的缺失windowsupdateagent-7.6-x64官网下载Windows6.1-KB4474419-v3-ia64.msu控制面板的update中选择安装支持sha-2校验【3】…

【算法】差分数组

目录1.概述2.代码实现3.应用本文参考&#xff1a; LABULADONG 的算法网站 1.概述 &#xff08;1&#xff09;差分数组的思想与前缀和算法的非常近似&#xff08;有关前置和算法的具体细节可以参考前缀和算法这篇文章&#xff09;&#xff0c;其主要适用于频繁地对原始数组的某…

国产单通道直流有刷马达驱动芯片型号推荐

直流有刷马达驱动芯片是一款适应消费类、工业类的单通道直流有刷驱动IC&#xff0c;适用于各类玩具&#xff0c;智能家居&#xff0c;智能三表。小封装&#xff0c;低功耗&#xff0c;内置完善的保护机制&#xff08;过温/过流/过压&#xff09;。具有一个PWM&#xff08;INA/I…

写了2年文章的我,昨天第一次露脸直播。

作为一名不知名的技术博主&#xff0c;上周六晚上在视频号第一次做露脸直播。 勇敢的迈出视频号开播的第一步&#xff0c;并且数据不错&#xff0c;这个感觉很爽&#xff0c;和写作输出完全是两回事。 写这篇文章的目的是鼓励技术博主们&#xff0c;也尝试一下直播和做视频。 …

ClickHouse 挺快,esProc SPL 更快

开源分析数据库ClickHouse以快著称&#xff0c;真的如此吗&#xff1f;我们通过对比测试来验证一下。 ClickHouse vs Oracle 先用ClickHouse&#xff08;简称CH&#xff09;、Oracle数据库&#xff08;简称ORA&#xff09;一起在相同的软硬件环境下做对比测试。测试基准使用国…

基于ESP8266和SU-03T的离线语音红外遥控器设计

一. 系统设计及框图 之前设计了基于ESP32模块的智能红外遥控器&#xff0c;具体功能见以下CSDN链接&#xff1a; 智能红外遥控器&#xff08;一&#xff09;&#xff1a;功能简介_远望创客学堂的博客-CSDN博客 上面这款智能红外遥控器可以实现红外的远程控制&#xff0c;也可…

【从零开始学习深度学习】44. 图像增广的几种常用方式并使用图像增广训练模型【Pytorch】

大规模数据集是成功应用深度神经网络的前提&#xff0c;图像增广&#xff08;image augmentation&#xff09;技术通过对训练图像做一系列随机改变&#xff0c;来产生相似但又不同的训练样本&#xff0c;从而扩大训练数据集的规模。图像增广的另一种解释是&#xff0c;随机改变…

PCB入门学习—PCB封装的创建2

3.2 IC类PCB封装的创建注&#xff1a;PCB封装的名字一定要和原理图上填写的封装名字一样&#xff0c;不然对不上。规格书里有最大值最小值&#xff0c;就按最大值来做。快捷键EA是特殊粘贴。SOP-8:焊盘比较多时(BGA)可以利用向导去创建。做封装从规格书需要读取的数据&#xff…

19-FreeRTOS 任务通知API

1-xTaskNotifyGive / xTaskNotifyGiveIndexed task.hBaseType_t xTaskNotifyGive( TaskHandle_t xTaskToNotify );BaseType_t xTaskNotifyGiveIndexed( TaskHandle_t xTaskToNotify, UBaseType_t uxIndexToNotify );每个任务都有一组“任务通知” &#xff08;或仅“通知” &a…

Tomcat Connector运行模式

目录 1 Tomcat Connector运行模式 1.1 BIO 模式 1.2 NIO 模式 1.3 APR模式 2 修改Tomcat Connector运行模式为apr 或者解决问题The APR not found 问题 2.1 linux系统 2.2 windows处理 1 Tomcat Connector运行模式 1.1 BIO 模式 BIO模式&#xff08;blocking I/O&am…

[C语言]运用函数指针数组构建一个简单计算器

1.函数指针数组 函数指针数组&#xff0c;即为存放函数首地址的数组&#xff0c;类型为函数指针类型。 2.运用函数指针数组构建简单计算器 1.人机交互&#xff0c;首先要用选择加减或乘除的菜单&#xff0c;再分别写出其功能 void menu() {printf("****************…

嵌入式实时操作系统的设计与开发(五)

线程退出 当线程代码执行完后&#xff0c;系统会隐式地调用acoral_thread_exit()函数进行线程退出相关的操作。 acoral_thread_exit()本质上是要执行acoral_kill_thread()。 void acoral_thread_exit(){acoral_kill_thread(acoral_cur_thread); }void acoral_kill_thread(aco…

ccbill 代码分析

ccbill目录概述需求&#xff1a;设计思路实现思路分析1.BillState2.DBList3.DBListAttr4.DBListDBSrc5.DBListDBSrcsDBListsSurvive by day and develop by night. talk for import biz , show your perfect code,full busy&#xff0c;skip hardness,make a better result,wai…

每日一题:Leetcode59. 螺旋矩阵 II

文章目录 系列&#xff1a;数组专练 语言&#xff1a;java & go 题目来源&#xff1a;Leetcode59. 螺旋矩阵 II 难度&#xff1a;中等 考点&#xff1a;边界问题的处理 & 圈数处理 思路和参考答案文章目录题目描述思路java解法&#xff1a;java参考代码go参考代码&…

OceanBase 4.0解读:从TPC-H性能测评看4.0与3.x差异

关于作者 肖帆 OceanBase技术专家 OceanBase技术专家&#xff0c;开源生态团队成员。毕业于华中科技大学软件工程专业&#xff0c;从事数据库领域的质量保障工作&#xff0c;曾就职于有赞、网易&#xff0c;参与关系型数据库、缓存数据库、对象存储相关产品的测试开发&#x…

.net core api调用webserver接口(详细)

这里废话不多说&#xff0c;我就不简述什么事webserver了&#xff0c;相信点进本博客的大佬都是为了解决问题。 .net core 调用webserver的话还挺简单。首先我们先有个.net core api的项目。 1.我们先注入这个HttpClient 这个内置对象&#xff0c;一会要用到。 // 注入HttpC…