think-queue消息队列的使用方法

news/2025/2/22 13:27:09/

1、创建配置文件:config/queue.php

<?php
return ['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' => 1,'timeout' => 0,'persistent' => false,],],'failed' => ['type' => 'none','table' => 'failed',],
];

2、创建abstract类:app/job/Queue.php

<?php
namespace app\job;use think\App;
use think\facade\Log;
use think\queue\Job;abstract class Queue
{/*** 创建任务*/public function fire(Job $job, $data){if (!$data) {Log::error(sprintf(' ==> [%s][%s] 队列无消息', __CLASS__, __FUNCTION__));}$result = $this->execute($data);if ($result) {Log::record(sprintf(' ==> [%s][%s] 队列执行成功', __CLASS__, __FUNCTION__));$job->delete();} else {if ($job->attempts() > 3) {Log::error(sprintf(' ==> [%s][%s] 队列执行重试次数超过3次,执行失败', __CLASS__, __FUNCTION__));$job->delete();} else {Log::error(sprintf(' ==> [%s][%s] 队列执行失败,延迟3秒后重试', __CLASS__, __FUNCTION__));$job->release(3);}}}/*** 执行业务逻辑*/abstract protected function execute($data): bool;
}

3、创建业务逻辑处理类:app/job/Task.php

<?php
namespace app\job;use app\job\Queue;
use think\App;
use think\facade\Log;class Task extends Queue
{/*** 执行业务逻辑*/protected function execute($data): bool{Log::record(sprintf(' ==> [%s][%s] 执行成功', __CLASS__, __FUNCTION__));return true;}
}

4、添加消息队列

$handle_name = 'app\job\Task';
$queue_name = 'task';
$params = ['type' => 'test','record_id' => 123,
];
// 立即执行
$pushed = Queue::push($handle_name, json_encode($params, JSON_UNESCAPED_UNICODE), $queue_name);
// 延迟5秒执行
// $pushed = Queue::later(5, $handle_name, $params, $queue_name);

5、命令行执行队列

php think queue:listen --queue task

6、supervisor配置守护进程:/supervisor/example.conf

[program:example]
command=php think queue:work --queue task
directory=/www/example
process_name=%(program_name)s_%(process_num)02d
user=www
autostart=true
autorestart=true
startsecs=1
startretries=20
numprocs=1
priority=100
stdout_logfile_maxbytes=2MB
stderr_logfile_maxbytes=2MB
stdout_logfile=/etc/supervisor/logs/example.out.log
stderr_logfile=/etc/supervisor/logs/example.err.log
欢迎加入IT技术交流接单微信群


http://www.ppmy.cn/news/1418086.html

相关文章

SHAP安装问题

一、安装 pip install shap -i https://pypi.tuna.tsinghua.edu.cn/simple 二、遇到问题 1、提示报错如下&#xff1a; ModuleNotFoundError: No module named numba.core 安装numba&#xff1a; pip install numba -i https://pypi.tuna.tsinghua.edu.cn/simple 提示已经…

【论文速读】| 基于大语言模型的模糊测试技术

本次分享论文为&#xff1a;Large Language Models Based Fuzzing Techniques: A Survey 基本信息 原文作者&#xff1a;Linghan Huang, Peizhou Zhao, Huaming Chen, Lei Ma 作者单位&#xff1a;悉尼大学&#xff1b;东京大学&#xff1b;阿尔伯塔大学 关键词&#xff1a;…

VirusTaxo:病毒物种注释

https://github.com/omics-lab/VirusTaxo 安装 git clone https://github.com/omics-lab/VirusTaxo mamba create -n VirusTaxo python3.10 mamba activate VirusTaxo cd VirusTaxo python3 -m venv environment source ./environment/bin/activate pip install -r require…

【数据结构】树与二叉树遍历算法的应用(求叶子节点个数、求树高、复制二叉树、创建二叉树、二叉树存放表达式、交换二叉树每个结点的左右孩子)

目录 求叶子节点个数、求树高、复制二叉树、创建二叉树、二叉树存放表达式、交换二叉树每个结点的左右孩子应用一&#xff1a;统计二叉树中叶子结点个数的算法写法一&#xff1a;使用静态变量写法二&#xff1a;传入 count 作为参数写法三&#xff1a;不使用额外变量 应用二&am…

计算机视觉——基于深度学习检测监控视频发生异常事件的算法实现

1. 简介 视频异常检测&#xff08;VAD&#xff09;是一门旨在自动化监控视频分析的技术&#xff0c;其核心目标是利用计算机视觉系统来监测监控摄像头的画面&#xff0c;并自动检测其中的异常或非常规活动。随着监控摄像头在各种场合的广泛应用&#xff0c;人工监视已经变得不…

Python快速获取编程问题答案的方法库之howdoi使用详解

概要 howdoi是一个命令行工具,它提供了一种快速获取编程问题答案的方法,通过搜索和抓取Stack Overflow等网站的内容,直接在终端中显示编程问题的解决方案。 安装 通过pip可以轻松安装howdoi: pip install howdoi特性 快速访问编程解决方案:无需手动浏览Stack Overflow。…

设计模式——迭代器模式15

迭代器模式提供一种方法访问一个容器对象中各个元素&#xff0c;而又不需暴露该对象的内部细节。 设计模式&#xff0c;一定要敲代码理解 抽象迭代器 /*** 迭代抽象* */ public interface Iterator<A> {A next();boolean hasNext(); }迭代器实现 /*** author ggbond*…

程序员副业指南

程序员副业指南 &#x1f31f; 程序员副业指南&#xff1a;如何通过技术项目和在线内容创造额外收入&#xff1f;&#x1f4d8; 正文内容&#x1f680; 个人项目开发&#x1f331; 初步探索**选择项目主题****市场调研** &#x1f6e0; 技术实现**技术栈选择**示例代码&#xf…