什么是队列?

从数据结构上来讲,队列是一种先进先出的数据结构

什么是消息队列?

消息队列可以简单理解为:把要传输的数据放在队列中

消息队列可以分为生产者和消费者,将传输的数据放到消息队列当中,就相当于生产者,从消息队列中取得数据,就相当于消费者

消息队列可以用来做什么?

电商的秒杀,可以防止超卖

爬虫,将数据存入队列,利用多进程消费

解耦,A系统中的数据放入队列,B和C以及D系统去获取数据

异步限流,提升用户体验,防止系统崩溃

消息队列有哪些?

常见的有redis、kafka,mqtt、以及各种MQ,当然各有各的优缺点

消息队列中最大的问题是什么?

那就是数据的丢失,数据如果没有做落地,那么数据一旦丢失,将无法找回

Easyswoole中如何实现消息队列

首先easyswoole提供了通用的队列驱动器,可以使用任何一种队列来进行封装使用,这里以默认的redis为例

composer 安装 composer require easyswoole/queue

定义一个队列

namespace App\Utility;

use EasySwoole\Component\Singleton;

use EasySwoole\Queue\Queue;

class RedisQueue extends Queue

{

use Singleton;

}

定义消费进程

namespace App\Process;

use App\Utility\RedisQueue;

use EasySwoole\Component\Process\AbstractProcess;

use EasySwoole\Queue\Job;

class QueueProcess extends AbstractProcess

{

protected function run($arg)

{

// TODO: Implement run() method.

go(function (){

RedisQueue::getInstance()->consumer()->listen(function (Job $job){

var_dump($job->toArray());

});

});

}

}

注册驱动以及投递任务

//在EasySwooleEvent.php 里面注册驱动

public static function mainServerCreate(EventRegister $register)

{

// TODO: Implement mainServerCreate() method.

//注册redis驱动队列

$redisData = Config::getInstance()->getConf('REDIS');

$redisConfig = new RedisConfig($redisData);

$redis = new RedisPool($redisConfig);

$driver = new \EasySwoole\Queue\Driver\Redis($redis);

RedisQueue::getInstance($driver);

//注册消费进程

ServerManager::getInstance()->addProcess(new QueueProcess());

$register->add($register::onWorkerStart,function ($ser,$id){

if($id == 0){

Timer::getInstance()->loop(3000,function (){

//自动投递任务

$job = new Job();

$job->setJobData(['time' => time()]);

RedisQueue::getInstance()->producer()->push($job);

});

}

});

}

手动或者业务中投递任务

public function index()

{

$job = new Job();

$job->setJobData(['test'=>'测试','time'=>time()]);

var_dump(RedisQueue::getInstance()->producer()->push($job));

}

运行 php easyswoole start 即可看到效果实现或者手动请求index方法进行手动任务的投递

php使用redis消息队列swoole,EasySwoole中利用redis实现消息队列相关推荐

  1. android开发 app消息提醒功能,Android中利用App实现消息推送机制的代码

    1.消息推送机制 服务器器端需要变被动为主动,通知客户一些开发商认为重要的信息,无论应用程序是否正在运行或者关闭. 我想到了一句话:don't call me,i will call you! qq今 ...

  2. c#获取对象的唯一标识_在 Java 中利用 redis 实现分布式全局唯一标识服务

    作者: 杨高超 juejin.im/post/5a4984265188252b145b643e 获取全局唯一标识的方法介绍 在一个IT系统中,获取一个对象的唯一标识符是一个普遍的需求.在以前的单体应用 ...

  3. PHP中利用redis实现消息队列处理高并发请求思路详解

    在电商活动中,常常会出现高并发的情况,例如很多人同时点击购买按钮,以至于购买人数超出了库存量,这是一种非常不理想的状况,因此,我们在PHP开发中就会引入消息队列来解决这种高并发的问题. 当用户点击按钮 ...

  4. php redis 查询,Redis慢查询日志 PHP中使用redis – 安装扩展模块

    Redis慢查询日志 编辑配置文件/etc/redis.conf 针对慢查询日志,可以设置两个参数,一个是执行时长,单位是微秒,另一个是慢查询日志的长度.当一个新的命令被写入日志时,最老的一条会从命令 ...

  5. 在 Java 中利用 redis 实现 LBS 服务

    前言 LBS(基于位置的服务) 服务是现在移动互联网中比较常用的功能.例如外卖服务中常用的我附近的店铺的功能,通常是以用户当前的位置坐标为基础,查询一定距离范围类的店铺,按照距离远近进行倒序排序. 自 ...

  6. linux连接redis 命令_在Docker中使用Redis

    1. 简介 本文章将介绍如何使用 Docker 探索 Redis.我们可以在 Docker for Windows .Docker for mac 或者 Linux 模式下运行 Docker 命令. ...

  7. java lbs_在 Java 中利用 redis 实现 LBS 服务

    前言 LBS(基于位置的服务) 服务是现在移动互联网中比较常用的功能.例如外卖服务中常用的我附近的店铺的功能,通常是以用户当前的位置坐标为基础,查询一定距离范围类的店铺,按照距离远近进行倒序排序. 自 ...

  8. Redis安装以及在Idea中使用Redis初尝试

    本文主要完成两方面的内容,一是  安装Redis服务端及验证:二是在Idea中链接Redis,并且编写程序初步使用Redis 1:安装Redis服务端及验证(win10-64位) Redis是一个开源 ...

  9. 【Java项目中 利用Redis实现数据缓存】

    文章目录 Java SpringBoot项目中 用Redis实现数据缓存 1 环境搭建 1.1 maven坐标 1.2 配置文件 1.3 配置类 2 实现缓存短信验证码 3 缓存菜品数据 4 Spri ...

最新文章

  1. 为什么yamlp中没有cplex_在《英雄联盟》中,为什么有些T1英雄并没有我们想象中那么强势?...
  2. NumericUpDown 控件输入限制小数位
  3. 有关identity的小技巧
  4. 基于GIS的视频管理指挥平台
  5. 执行单元测试 报TEST class 有不能识别字符
  6. Linux服务部署之NTP时间服务器
  7. memmove 对同一个指针不操作
  8. 《软件项目管理(第二版)》第 9 章——项目监督与控制 重点部分总结
  9. linux 环境下git的安装与配置
  10. MySQL:常用备份方式(基于5.7)
  11. 统计自然语言处理(第二版)学习笔记:第一章
  12. jquery tableExport 插件导出excel (无乱码) 比较简单的表格
  13. 记一次too many open files 异常
  14. 运筹学基础:第2章-线性规划建模(习题笔记)
  15. 硬盘突然变raw格式_硬盘变成RAW格式怎么办
  16. 红外线 电磁波频谱
  17. Xilinx 7系列FPGA之Kintex-7产品简介
  18. 入职第一个CRUD项目小结
  19. 半同步/半反应堆线程池实现
  20. Hive安装过程中出现 The reference to entity createDatabaseIfNotExist must end with the ';' delimiter.问题

热门文章

  1. python 双色球、大乐透彩票的杀号定胆自制工具
  2. markdown笔记(源码)
  3. BBC的全球用户数量增至3.76亿
  4. 玩转kindle paperwhite: 如何越狱,安装强大外挂软件koreader
  5. 基于 RHEL 7.6 安装 Docker 运行环境
  6. Intel汇编-FPU状态
  7. java里%是什么_java里.是什么意思?
  8. 12个情人节分别是什么?
  9. 开源项目-OA管理系统,办公自动化系统
  10. 【GaussDB数据库简介】