广告
返回顶部
首页 > 资讯 > 后端开发 > PHP编程 >ThinkPHP怎么使用think-queue实现redis消息队列
  • 241
分享到

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

2023-07-02 13:07:10 241人浏览 泡泡鱼
摘要

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

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

简单介绍:

消息队列中间件是大型系统中的重要组件,已经逐渐成为企业系统内部通信的核心手段。它具有松耦合、异步消息、流量削峰、可靠投递、广播、流量控制、最终一致性等一系列功能,已经成为异步rpc的主要手段之一。

大白话:

消息队列有两个角色和一个容器,角色分别为生产者(负责发布任务)和消费者(负责执行任务),容器这是用来存放/堆积生产者发布的任务,将发布和执行两个步骤分开且互不影响。

消息队列的大致流程为:

生产者发布任务存放/堆积在消息队列中,由消费者主动去消息队列中取出任务并执行,先发布的先执行(队列:先进先出),在没有消费者的情况下任务会堆积在队列中等待被取出执行。

优点:

消息队列适用于大并发或者处理时间长并需要批量操作的第三方接口,可用于但不仅限于短信发送、邮件发送、APP推送等,支持跨系统,即本系统发布的消息队列可以由自己或者给其他系统执行任务,同理本系统也可以作为消费者执行自己或者其他系统发布的消息队列任务。


接下来主要介绍一下 think-queue 的使用

ThinkPHP的Queue内置了 Redis、Database、Topthink、Sync四种驱动,这里使用的是 Redis,也推荐使用 Redis

think-queue 队列消息可以进行任务的发布、获取、执行、删除、重新发布、延迟发布、超时控制等操作

消息队列基本配置

在 extra 目录下创建 queue.php 配置文件

<?phpreturn [    'connector'  => 'Redis',    'expire'     => null,   // 任务过期时间,默认为60秒,若要禁用,则设置为 null    'default'    => 'REDIS_QUEUE',  // 默认的队列名    'host'       => '127.0.0.1',   // redis 主机ip    'port'       => 6379,   // redis 端口    'passWord'   => '',   // redis 密码    'select'     => 0,   // 使用哪里一个 db,默认为 db0    'timeout'    => 0,   // redis 连接的超时时间    'persistent' => false,   // 是否是长连接];

至于为什么放在这里,是因为 Queue 源代码默认从 extra 读取 queue 文件获取配置信息,如果想要将配置文件放置其他地方,则需要对应去修改源代码中的默认获取配置

生产者

创建一个测试类,写入生产者方法

<?phpnamespace app\api\controller;use think\Controller;use think\Queue;class Test extends Controller{    // 生产者,添加消息队列    public function addQueue()    {        // 参数        $data = [            'id' => rand(0, 99),            'userName' => '一起摸鱼'        ];        // 消息队列名        $queueName = 'testQueue';        // 推入消息队列,注意这里的 ::class 是PHP5.5才有的写法        $isPushed = Queue::push(TestQueue::class, $data, $queueName);// PHP5.5以下的可以直接写命名空间        // $isPushed = Queue::push('app\common\queue\TestQueue', $data, $queueName);                if ($isPushed !== false) {            // 成功之后的业务            echo '队列加入成功';        } else {            // 失败之后的业务            echo '队列加入失败';        }    }}

消费者

创建一个 TestQueue 类,用做消费者,执行消息队列中的任务

<?phpnamespace app\common\queue;use think\Log;use think\queue\Job;class TestQueue{    // 消费者执行入口    public function fire(Job $job, $data)    {        // 具体执行业务        $isJobDone = $this->doJob($data);                if ($isJobDone) {            // 消息队列执行成功,删除队列,否则会一直执行            $job->delete();        } else {            // 消息队列执行失败            // 获取消息队列已经重试了几遍            $attempts = $job->attempts();            if ($attempts == 0 || $attempts == 1) {                // 重新发布,参数 delay 是延时发布的时间                $job->release(2);            }        }    }    // 消息队列执行失败后会自动执行该方法    public function failed($data)    {        Log::error('消息队列达到最大重复执行次数后失败:' . JSON_encode($data));    }    // 消息队列执行方法    public function doJob($data)    {        // 具体执行业务                        $data = json_encode($data);        echo '消息队列:' . $data;        // 这里的判断条件以具体业务是否执行成功进行判断        if ($data) {            echo "执行成功";            return true;        } else {            echo "执行失败";            return false;        }    }}

接下来就是启用队列的监听模式了,因为不可能每次一有任务加进来就去手动执行一次队列。队列的监听模式有两种

项目根目录执行

php think queue:work --queue 队列名

但是由于需要,我们还要将消费者挂起守护进程执行,以确保关掉终端还能够启动队列。

nohup php think queue:listen --queue 队列名 &

PS:shell中输入exit来退出终端
PS:shell中输入exit来退出终端
PS:shell中输入exit来退出终端

因为在nohup执行成功后直接点关闭程序按钮关闭终端时会断掉该命令所对应的session,导致 nohup 对应的进程被通知需要一起关掉。

到此,相信大家对“ThinkPHP怎么使用think-queue实现redis消息队列”有了更深的了解,不妨来实际操作一番吧!这里是编程网网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

--结束END--

本文标题: ThinkPHP怎么使用think-queue实现redis消息队列

本文链接: https://www.lsjlt.com/news/342175.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

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

下载Word文档
猜你喜欢
  • ThinkPHP怎么使用think-queue实现redis消息队列
    本篇内容主要讲解“ThinkPHP怎么使用think-queue实现redis消息队列”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“ThinkPHP怎么使用think-queue实现redis消...
    99+
    2023-07-02
  • ThinkPHP 使用 think-queue 实现 redis 消息队列(超详细)
    简单介绍: 消息队列中间件是大型系统中的重要组件,已经逐渐成为企业系统内部通信的核心手段。它具有松耦合、异步消息、流量削峰、可靠投递、广播、流量控制、最终一致性等一系列功能,已经成为异步RPC的主要手...
    99+
    2023-09-04
    redis php
  • ThinkPHP基于think-queue的队列插件实现消息推送
    目录前言安装搭建消息队列的存储环境消息的创建与推送消息的消费与删除发布任务处理任务think-queue是ThinkPHP官方提供的一个消息队列服务,是专门支持队列服务的扩展包。th...
    99+
    2022-12-14
    thinkphp think-queue 消息推送
  • thinkphp6 使用 topthink/think-queue 配置守护进程消息队列
    当前演示使用宝塔面板 安装composer require topthink/think-queue 配置config/queue.php return [ //驱动类型,可选择 sync(默认):同...
    99+
    2023-09-21
    数据库 php redis
  • thinkphp6使用think-queue怎么实现普通队列和延迟队列
    本文小编为大家详细介绍“thinkphp6使用think-queue怎么实现普通队列和延迟队列”,内容详细,步骤清晰,细节处理妥当,希望这篇“thinkphp6使用think-queue怎么实现普通队列和延迟队列”文章能帮助大家解决疑惑,下...
    99+
    2023-06-30
  • redis怎么实现消息队列
    Redis可以通过以下几种方式实现消息队列:1. List数据结构:使用Redis的List数据结构实现简单的消息队列。生产者将消息...
    99+
    2023-09-14
    redis
  • Redis怎么使用ZSET实现消息队列
    这篇文章主要介绍了Redis怎么使用ZSET实现消息队列的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Redis怎么使用ZSET实现消息队列文章都会有所收获,下面我们一起来看看吧。1.redis 用zset做消...
    99+
    2023-07-05
  • 怎么使用redis消息队列
    要使用Redis作为消息队列,你需要按照以下步骤进行操作:1. 安装并启动Redis服务。2. 在你的应用程序中引入Redis的客户...
    99+
    2023-08-24
    redis
  • thinkphp6、thinkphp5.0 使用think-queue实现普通队列和延迟队列
    何为异步消息队列: 所谓消息队列,就是一个以队列数据结构为基础的一个实体,这个实体是真实存在的,比如程序中的数组,数据库中的表,或者redis等等,都可以。 异步队列的作用: 个人认为消息队列的主...
    99+
    2023-08-31
    redis php
  • Redis消息队列怎么实现秒杀
    要实现秒杀功能,可以使用Redis的消息队列来进行异步处理。下面是一种基本的实现方法:1. 准备工作:创建一个商品库存键值对,如"s...
    99+
    2023-10-11
    Redis
  • 如何使用redis实现消息队列
    使用redis实现消息队列的示例:redis的pubsub功能实现发布订阅模式,代码:import redisclass Task(object):def __init__(self):self.rcon = redis.StrictRed...
    99+
    2022-10-24
  • 怎么在springboot中用redis实现消息队列
    本篇内容主要讲解“怎么在springboot中用redis实现消息队列”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么在springboot中用redis实现消息队列”吧!准备阶段安装redi...
    99+
    2023-06-19
  • 利用Redis流怎么实现一个消息队列
    利用Redis流怎么实现一个消息队列?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。代码清单 10-1 展示了一个具有基本功能的消息队列实现:代...
    99+
    2022-10-18
  • Redis使用ZSET实现消息队列使用小结
    目录1.Redis 用zset做消息队列如何处理消息积压2.redis分片并使用zset做消息队列3. redis如何分片4. redis使用Java发送消息到zset队列并对消息进行分片处理5. redis使用zset...
    99+
    2023-03-19
    Redis使用ZSET实现消息队列 Redis消息队列
  • 简述thinkphp自带队列think-queue的使用以及通过supervisor实现常驻进程
    think-queue是thinkphp官方提供的一个消息队列服务,适用于大并发、返回结果时间较长、需要批量操作等专门支持队列服务的扩展包。例如短信发送、模板消息邮件等推送。可以进行发布、获取、执行、...
    99+
    2023-09-07
    linux php redis
  • redis中怎么用list做消息队列
    本文小编为大家详细介绍“redis中怎么用list做消息队列”,内容详细,步骤清晰,细节处理妥当,希望这篇“redis中怎么用list做消息队列”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。leftPush消息入...
    99+
    2023-06-29
  • 详解Redis用链表实现消息队列
    前言 Redis链表经常会被用于消息队列的服务,以完成多程序之间的消息交换。个人认为redis消息队列有一个好处,就是可以实现分布式和共享,就和memcache作为mysql的缓存和mysql自带的缓存一样...
    99+
    2022-06-04
    队列 详解 链表
  • redis中队列消息实现应用解耦
    本篇文章给大家分享的是有关redis中队列消息实现应用解耦,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。1、如果redis服务器挂掉了怎么办啊...
    99+
    2022-10-18
  • go怎么实现消息队列
    在Go语言中,你可以使用第三方库来实现消息队列。目前比较常用的消息队列库有:1. RabbitMQ:RabbitMQ是一个开源的消息...
    99+
    2023-08-31
    go
  • golang怎么实现消息队列
    在Golang中实现消息队列可以使用Golang的内置库和第三方库来实现。以下是两种常见的实现方式: 使用Golang内置的cha...
    99+
    2023-10-25
    golang
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作