【Fastadmin/ThinkPHP5】使用Queue队列方法详细步骤

在现代应用开发中,合理利用队列系统能够有效提升系统的性能和响应速度,尤其是在处理耗时较长的任务时,如发送大量邮件、执行定时任务等。下面是如何在ThinkPHP框架中设置和使用队列功能的详细指南:

1.配置队列服务

application/extra/queue.php文件中,我们设置了队列的连接器及其相关配置:

<?phpuse think\Env;return ['connector' => Env::get('queue.CONNECTOR', 'redis'),//驱动类型,可选择 sync(默认):同步执行,database:数据库驱动,redis:Redis驱动,topthink:Topthink驱动//或其他自定义的完整的类名'host' => Env::get('app.REDIS_HOST', '127.0.0.1'),'port' => Env::get('app.REDIS_PORT', '6379'),'password' => Env::get('app.REDIS_PASSWORD', ''),'select' => Env::get('app.REDIS_DB', 1),
];

上述代码中,我们可以通过环境变量灵活地配置了队列连接器,支持同步执行、数据库驱动和Redis驱动等多种方式。

2.创建Job类

我们在application/common/library/job/MessageSendJob.php中创建了一个处理邮件发送任务的Job类:

<?php
namespace app\common\library\job;use app\common\library\Ems;
use think\queue\Job;class MessageSendJob
{/*** 处理邮件发送任务** @param Job $job 当前任务对象* @param array $data 邮件发送所需数据*/public function handle(Job $job, array $data){try {// 实现邮件发送逻辑Ems::sendNotice($data['email'], $data['title'], $data['content']);echo $data['email'] . '邮件发送成功'. PHP_EOL;// 成功发送邮件后删除队列任务$job->delete();} catch (\Exception $e) {// 若邮件发送失败,可根据实际需求决定是否重新入队if ($job->attempts() < 3) { // 例如最多重试3次$job->release(60); // 在60秒后再次尝试执行} else {$this->failed($job, $data);}}}/*** 任务执行失败后的回调** @param Job $job 当前任务对象* @param array $data 邮件发送所需数据*/public function failed(Job $job, array $data){// 记录日志或采取其他补救措施Log::record('邮件发送任务失败,邮箱:' . $data['email'], 'error');// 可考虑在此处通知管理员,或采取其他失败后处理逻辑}
}

3.将任务加入队列

// 构建邮件发送任务数据
$queueData = ['email' => $email,'title' => $title,'content' => $content,
];// 使用MessageSendJob类将任务推送到'message'队列
Queue::push(MessageSendJob::class, $queueData, 'message');

4.启动队列监听

  在命令行环境下,我们可以通过以下命令监听特定队列或全局监听所有队列:

  • 监听特定队列(如'message'):php think queue:listen --queue message
  • 全局监听所有队列:php think queue:listen

通过以上步骤,我们成功地在ThinkPHP框架中实现了队列任务的创建、配置与监听,使得系统在处理耗时任务时更加高效流畅。

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

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

相关文章

Tomcat服务部署、优化

一 Tomcat的基本介绍 Tomcat概念 Tomcat 服务器是一个免费的开放源代码的Web 应用服务器&#xff0c;属于轻量级应用服务器&#xff0c;在中小型系统和并发访问用户不是很多的场合下被普遍使用&#xff0c;是开发和调试 JSP 程序的首选。 当在一台机器上配置好Apache 服务器…

VMwareWorkstation17.0虚拟机搭建WindowsXP虚拟机(完整安装步骤详细图文教程)

VMwareWorkstation17.0虚拟机搭建WindowsXP虚拟机&#xff08;完整安装步骤详细图文教程&#xff09; 一、Windows XP1.Windows XP简介2.Windows XP 的下载地址 二、配置 Windows XP 虚拟机运行环境1.新建虚拟机2.选择类型配置3.插入WinXP光盘映像文件(ISO)4.选择操作系统5.命名…

Home Assistant:基于Python的智能家居开源系统详解

Home Assistant&#xff1a;基于Python的智能家居开源系统详解 在数字化和智能化的时代&#xff0c;智能家居系统成为了现代家庭的新宠。它们能够让我们更加方便地控制家中的各种设备&#xff0c;实现自动化和个性化的居住体验。其中&#xff0c;Home Assistant作为一款基于Pyt…

美易官方:3月1日美股成交额前20

3月1日&#xff0c;美股市场热闹非凡&#xff0c;成交额前20的公司股票交易活跃&#xff0c;其中&#xff0c;英伟达&#xff08;NVIDIA&#xff09;的股价收在800美元之上&#xff0c;创下了历史新高。这一天的股市走势充分展示了投资者对于科技股的热烈追捧&#xff0c;同时也…

手机NFC录入门禁数据,实现手机开门

近场通信&#xff08;Near Field Communication&#xff0c;简称NFC&#xff09;&#xff1a; 是一种新兴的技术&#xff0c;使用了NFC技术的设备&#xff08;例如移动电话&#xff09;可以在彼此靠近的情况下进行数据交换&#xff0c;是由非接触式射频识别&#xff08;RFID&am…

【二分】二分模板+二分题目

一、朴素二分 . - 力扣&#xff08;LeetCode&#xff09;. - 备战技术面试&#xff1f;力扣提供海量技术面试资源&#xff0c;帮助你高效提升编程技能,轻松拿下世界 IT 名企 Dream Offer。https://leetcode.cn/problems/binary-search/description/ int left 0, right nums.…

【leetcode】随机链表的复制

大家好&#xff0c;我是苏貝&#xff0c;本篇博客带大家刷题&#xff0c;如果你觉得我写的还不错的话&#xff0c;可以给我一个赞&#x1f44d;吗&#xff0c;感谢❤️ 点击查看题目 思路: struct Node* copyRandomList(struct Node* head) {struct Node* curhead;//1.copy原链…

MWC 2024丨美格智能CEO杜国彬出席中国联通创新成果发布会并发表主题演讲

2月26日&#xff0c;中国联通在MWC2024 巴塞罗那期间举办了以“算网为基&#xff0c;智领未来”为主题的创新成果发布会&#xff0c;集中展示最新的创新成果与最佳实践。 中国通信标准化协会理事长闻库、GSMA首席财务官Louise Easterbrook、中国联通副总经理梁宝俊、华为ICT销…

每日一“类“:深入理解Qt的心脏《QObject》

Qt框架以其强大的跨平台能力和丰富的用户界面元素而广受开发者欢迎&#xff0c;而QObject类无疑是Qt框架心脏的所在。本文将深入探讨QObject&#xff0c;揭示其提供的核心功能以及如何在Qt项目中有效利用这个基类。 核心功能 信号与槽 Qt独特的信号与槽机制是其事件通信的基…

AWS 认证报名考试流程

AWS认证的考试包括&#xff0c;可以申请线上或者线下考试。 考试类型 线上&#xff1a; 优点&#xff1a;方便快捷无需通勤&#xff0c;随时约随时考&#xff0c;基本上每天都可以 缺点&#xff1a;对环境要求较高&#xff0c;屋子里只能有自己&#xff0c;而且不能有其他声音…

yolov9 瑞芯微芯片rknn部署、地平线芯片Horizon部署、TensorRT部署

特别说明&#xff1a;参考官方开源的yolov9代码、瑞芯微官方文档、地平线的官方文档&#xff0c;如有侵权告知删&#xff0c;谢谢。 模型和完整仿真测试代码&#xff0c;放在github上参考链接 模型和代码。 之前写过yolov8检测、分割、关键点模型的部署的多篇博文&#xff0c;y…

如何安装VM ware 17 pro 和Ubuntu安装

下载VM ware软件 下载地址&#xff1a;Windows VM | Workstation Pro | VMware按步骤安装&#xff0c;安装成功后&#xff0c;打开软件&#xff0c;填写证书秘钥 秘钥&#xff1a;MC60H-DWHD5-H80U9-6V85M-8280D&#xff08;亲测有效&#xff09;下载ubuntu 参考博客&#xff1…

软考中级 软件设计师备考经验

考试介绍 软考中级的软件设计师需要考两个部分&#xff0c;选择题和大题&#xff0c;每科满分75&#xff0c;需要在同一次考试中两科同时大于等于45分才算通过。考试的内容包括计算机组成原理、数据结构、数据库、专业英语、信息安全、计算机网络等&#xff0c;范围比较广但考…

Linux中systemv共享内存

目录 1.原理 2.接口 1.shmget(share_memory_get获得共享内存) 2.ftok 3.shmat(share_memory_attaintion挂接到物理内存上) 4.key和shmid的区别 5.ipc 指令 6.shmdt函数&#xff08;share_memory_detach取消挂接&#xff09; 7.shmctl函数&#xff08;share_memory_cont…

C# 数组与集合

C# 数组与集合 Array using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks;namespace _16._1_Array {internal class Program{static void Main(string[] args){int[] ints1 { 1, 2, 3, 4, 5,6,7,8 };//将…

GenAI助力DevOps,塑造软件工程的未来

自 2022 年以来&#xff0c;GenAI 无疑已成为一种普遍的技术趋势。在本文中&#xff0c;我们将探索 DevOps 中令人兴奋的 GenAI 领域&#xff0c;讨论其潜在优势、局限性、新兴趋势和最佳实践&#xff0c;深入了解 AI 支持的 DevOps 前沿世界&#xff0c;并探索这一强大组合如何…

ObjectFactory学习

简介 在Spring框架中&#xff0c;ObjectFactory是一个功能接口&#xff0c;它定义了一个简单的方法来获取对象的实例。ObjectFactory接口通常用于工厂模式和依赖注入中&#xff0c;允许延迟对象创建和配置&#xff0c;以及在运行时动态地决定要返回的对象实例。 源码 Functi…

Laravel Octane 和 Swoole 协程的使用分析二

又仔细研究了下 Octane 源码和 Swoole 的文档&#xff0c;关于前几天 Laravel Octane 和 Swoole 协程的使用分析中的猜想&#xff0c;得到进一步验证&#xff1a; Swoole 的 HTTP Server 启动后会创建一个 master 进程和一个 manager 进程&#xff1b;master 进程又会创建多个…

智能咖啡厅助手:人形机器人 +融合大模型,行为驱动的智能咖啡厅机器人(机器人大模型与具身智能挑战赛)

智能咖啡厅助手&#xff1a;人形机器人 融合大模型&#xff0c;行为驱动的智能咖啡厅机器人(机器人大模型与具身智能挑战赛) “机器人大模型与具身智能挑战赛”的参赛作品。的目标是结合前沿的大模型技术和具身智能技术&#xff0c;开发能在模拟的咖啡厅场景中承担服务员角色并…

常用备注(记录中...)

文章目录 docker测试网络可达性检查端口是否开放PgSql docker docker logout IP地址:端口号 docker login IP地址:端口号桥接模式bridge启动容器 docker run -d -p 外部端口号:内部端口号(配置文件中的端口号) --name 容器名称 -v /data/docker/conf/application.yml:/app/con…