我的编程空间,编程开发者的网络收藏夹
学习永远不晚

【PHP】TP6 queue队列基本使用

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

【PHP】TP6 queue队列基本使用

TP6 queue队列基本使用

关于队列的模式

sync 同步执行
2:database 配合数据库完成
3:redis 配合redis完成
小提醒:异步执行 最好使用redis作为配合

直接开始上代码

首先在项目根目录下执行composer require topthink/think-queue

修改config下queue文件

return [    'default'     => 'redis',    'connections' => [        'sync'     => [            'type' => 'sync',        ],        'database' => [            'type'       => 'database',            'queue'      => 'default',            'table'      => 'jobs',            'connection' => null,        ],        'redis'    => [            'type'       => 'redis',            'queue'      => 'robot',            'host'       => env('redis.host','127.0.0.1'),            'port'       => env('redis.port',6379),            'password'   => env('redis.password',''),            'select'     => env('redis.select',0),            'timeout'    => 0,            'persistent' => false,        ],    ],    'failed'      => [        'type'  => 'none',        'table' => 'failed_jobs',    ],];

我这里是连接到redis

投递消息

在app下创建文件夹job//一般都叫这个
创建文件 我这里叫sendMessage

namespace app\job;use think\facade\Queue;class SendMessage{    public function sendMessage(array $data){//data 是你要处理的数据        $jobHandlerClassName = 'app\job\Message';        //当前任务归属的队列名称,如果为新队列,会自动创建        //php think queue:work --queue orderJobQueue        //php think queue:work --queue orderJobQueue --daemon        $jobQueueName = "sendMessage";        //将该任务推送到消息队列,等待对应的消费者去执行        //这里只是负责将数据添加到相应的队列名称的队列里,消费者与生产者并无联系        //立即执行        $isPushed = Queue::push($jobHandlerClassName, $data, $jobQueueName);        //延迟10秒后执行        //$isPushed = Queue::later(10, $jobHandlerClassName, $orderData, $jobQueueName);        if ($isPushed !== false) {            return false;        }        return true;    }}

消费消息队列

namespace app\job;use app\api\service\MessageService;use think\facade\Log;use think\queue\Job;class Message{        public function fire(Job $job, array $data)    {        //有些消息在到达消费者时,可能已经不再需要执行了        $isJobStillNeedToBeDone = $this->checkDatabaseToSeeIfJobNeedToBeDone($data);        if(!$isJobStillNeedToBeDone){            $job->delete();            return;        }        $jobId =  $job->getJobId();        $isJobDone = $this->message($data, $jobId);        if ($isJobDone) {            //如果任务执行成功,记得删除任务            $job->delete();        } else {            //通过这个方法可以检查这个任务已经重试了几次了            if ($job->attempts() > 3){                Log::error('试了3次了');                $job->delete();                //也可以重新发布这个任务                //print("Hello Job will be availabe again after 2s."."\n");                //$job->release(2); //$delay为延迟时间,表示该任务延迟2秒后再执行            }        }    }        private function checkDatabaseToSeeIfJobNeedToBeDone(array $data): bool    {        return true;    }        public function message(array $data,  $jobId): bool    {        //对你的订单这些进行一个处理        (new MessageService())->initMessage($data);        return true;    }}

接口处理

public function index(): Response    {        date_default_timezone_set('PRC');        $params = input('post.');        trace($params);        //投递进队列        (new SendMessage())->sendMessage($params);        return echoJson(['code'=>200]);    }

运行php think queue:listen --queue sendMessage

喜欢的点个关注呗 有问题留言 我看到会回复的

来源地址:https://blog.csdn.net/qq_35318236/article/details/126740577

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

【PHP】TP6 queue队列基本使用

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

java队列queue使用场景有哪些

Java队列(Queue)是一种数据结构,遵循先进先出(FIFO)原则。它可以在队尾插入元素,在队头删除元素。以下是一些Java队列的使用场景:1. 任务调度:队列可以用于任务调度,将待执行的任务按照先后顺序加入队列,然后按照队列的顺序执行
2023-08-18

jQuery中队列queue()函数怎么使用

这篇“jQuery中队列queue()函数怎么使用”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“jQuery中队列queue
2023-07-04

thinkphp6使用think-queue怎么实现普通队列和延迟队列

本文小编为大家详细介绍“thinkphp6使用think-queue怎么实现普通队列和延迟队列”,内容详细,步骤清晰,细节处理妥当,希望这篇“thinkphp6使用think-queue怎么实现普通队列和延迟队列”文章能帮助大家解决疑惑,下
2023-06-30

Yii使用queue实现队列流程讲解

Yii是一个高性能的PHP5的web应用程序开发框架。通过一个简单的命令行工具yiic可以快速创建一个web应用程序的代码框架,开发者可以在生成的代码框架基础上添加业务逻辑,以快速完成应用程序的开发
2022-11-13

ThinkPHP怎么使用think-queue实现redis消息队列

本篇内容主要讲解“ThinkPHP怎么使用think-queue实现redis消息队列”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“ThinkPHP怎么使用think-queue实现redis消
2023-07-02

详解RabbitMQ延迟队列的基本使用和优化

这篇文章主要介绍了详解RabbitMQ延迟队列的基本使用和优化,延迟队列中的元素都是带有时间属性的。延迟队列就是用来存放需要在指定时间被处理的元素的队列,需要的朋友可以参考下
2023-05-19

Python中怎么使用队列Queue来改造转账场景

今天小编给大家分享一下Python中怎么使用队列Queue来改造转账场景的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。一、看
2023-06-29

C#使用泛型队列Queue实现生产消费模式

这篇文章介绍了C#使用泛型队列Queue实现生产消费模式的方法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
2022-11-13

Java自带消息队列Queue的使用教程详细讲解

这篇文章主要介绍了Java自带消息队列Queue的使用教程,Java中的queue类是队列数据结构管理类,在它里边的元素可以按照添加它们的相同顺序被移除,队列通常以FIFO的方式排序各个元素,感兴趣想要详细了解可以参考下文
2023-05-20

Java阻塞队列BlockingQueue基础与使用

本文详细介绍了BlockingQueue家庭中的所有成员,包括他们各自的功能以及常见使用场景,通过实例代码介绍了Java阻塞队列BlockingQueue的相关知识,需要的朋友可以参考下
2023-01-03

PHP怎么使用Redis队列执行定时任务

这篇文章给大家分享的是有关PHP怎么使用Redis队列执行定时任务的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。Redis类:
2023-06-14

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录