队列的概念:

1、是队列结构的中间件

2、消息放入后不需要立即处理

3、由订阅者/消费者按顺序处理

队列原理:

也是解耦的原理:业务系统和队列处理系统没有关系

一个写(业务系统),一个读(队列管理系统)。

写的只管往队列里写,别的不用操心,读的能不能读完和写的也没有关系

同样,读的只管从队列里往外读,来活儿就干,没活儿歇着

应用场景:

冗余:持久化的存储在队列中,后续由订单处理程序获取,处理完成之后,在把这条记录进行删除

解耦:是解这2套系统(业务和队列处理),我们平常做的都是一套系统的。入队和出队的系统没有直接的关系,其中一套蹦了,另一套系统不会受影响,因为中间隔了个队列

流量削锋:秒杀和抢购。流量剧增,配合缓存使用消息队列(就是限制下,如 只允许10个,队列里存10个之后就不存了,在来就提示秒杀结束)

异步通信:因为消息本身就可使入队的系统直接返回,所以说实现了程序的异步操作

场景扩展性:如 现在只有订单系统和财务系统,后续我想加个配货系统,直接让配货系统订阅这个队列就可以

排序保证:有些场景下,如 银行数据的处理顺序是很重要的,因为队列本身就可以做成单线程,单进单出的这种系统

实现介质:

1、使用mysql:可靠性高,易实现,速度慢

2、使用redis:速度快,单条大消息包时效率低

3、使用更专业的第三方类库:专业性强,可靠,学习成本高。

请参考我这篇博客http://blog.csdn.net/qq_33862644/article/details/79386484

消息处理触发机制:

1、死循环方式读取:易实现,故障时无法及时回复(适用于秒杀这种短时间的)

2、定时任务:压力均分,有处理上限(无论你队列前的系统,峰值多么不稳定,队列后的系统依然会定时执行)

注意:定时时间是个关键:不要上一个还定时任务没执行完,下一个定时任务就启动了

案例:订单系统,下单后将订单信息写入队列后,立刻返回下单成功。配货系统每隔几分钟定时读取队列,对订单进行汇总处理

3、守护进程:类似于php-fpm和cgi,需要shell基础(用这个进程来检测,队列中是否有内容,有内容的话,启动出队系统进行处理)

使用mysql实现解耦案例:
为什么要解耦:如果架构在一起。订单系统压力大,而物流信息是不需要立刻返回的。订单崩了,物流也就蹦了,所以要解耦

表的设计:

订单系统写入队列的代码:

配货系统读取队列的代码:

执行定时任务Crontab -e

注意:这日志文件要自己新建

1、通过浏览器访问order.php添加订单

2、去数据库看结果,在shell中的日志中看结果(没有执行成功,可能是这sh文件需要放在某个特点目录吧,等复习完 在跑)

使用redis进行流量削锋案例

思路:

1、秒杀程序请求写入redis

2、检查redis已存放数据的长度,超出上限直接丢弃(返回秒杀结束)

3、死循环处理存入redis的数据并入库

表的设计:

秒杀代码:

入库代码:

浏览器直接访问user.php

在shell中使用php -f savetodb.php

去数据库查看

转载自公众号

PHP消息队列的实现方式相关推荐

  1. 消息队列相关使用方式

    消息队列:Message Queue java消息队列基础理解 https://www.cnblogs.com/carsonwuu/p/10399527.html kafka消息生产产者图 https ...

  2. activeMQ消息队列(xml方式)

    一.项目搭建(spring+activeMQ环境) 导包: <!-- 消息队列 MQ --><dependency><groupId>org.apache.acti ...

  3. 消息队列的其他实现方式

    在 Redis 5.0 之前消息队列的实现方式有很多种,比较常见的除了我们上文介绍的发布订阅模式,还有两种:List 和 ZSet 的实现方式. List 和 ZSet 的方式解决了发布订阅模式不能持 ...

  4. STM32 FreeRTOS USART DMA空闲中断和消息队列的使用

    (后文有修改) 一.思路 USART+DMA空闲中断发生后,将接收到的DMA消息用消息队列发出去xQueueSendToFrontFromISR,FreeRTOS创建一个独立的任务一直等待接受消息队列 ...

  5. MSMQ(MicroSoft Message Queue,微软消息队列)

    MSMQ(MicroSoft Message Queue,微软消息队列)是在多个不同的应用之间实现相互通信的一种异步传输模式,相互通信的应用可以分布于同一台机器上,也可以分布于相连的网络空间中的任一位 ...

  6. Redis 消息队列的三种方案(List、Streams、Pub/Sub)

    现如今的互联网应用大都是采用 分布式系统架构 设计的,所以 消息队列 已经逐渐成为企业应用系统 内部通信 的核心手段,它具有 低耦合.可靠投递.广播.流量控制.最终一致性 等一系列功能. 当前使用较多 ...

  7. 消息队列终极解决方案——Stream(上)

    在 Redis 5.0 Stream 没出来之前,消息队列的实现方式都有着各自的缺陷,例如: 发布订阅模式 PubSub,不能持久化也就无法可靠的保存消息,并且对于离线重连的客户端不能读取历史消息的缺 ...

  8. msgget();msgsnd();msgrcv();msgctl(); 消息队列 Linux进程间的通信方式之消息队列

    Linux进程间的通信方式 ----消息队列. 消息队列和共享内存类似 消息队列它允许一个或多个进程向它写消息,一个或多个进程向它写读消息. 消息队列存在于系统内核中,消息的数量受系统限制. 我们来看 ...

  9. java 消息队列_JAVA-消息队列

    一.消息队列的作用 1.在某些时候,会突然有许多用户发出请求,就比如某宝搞活动,这时候,服务器就会同时处理复数的请求,可能会出现响应超时的问题,轻则服务器假死,重则直接宕机.而消息队列,可以在服务器接 ...

  10. 消息队列mq的原理及实现方法

    消息队列技术是分布式应用间交换信息的一种技术.消息队列可驻留在内存或磁盘上,队列存储消息直到它们被应用程序读走.通过消息队列,应用程序可独立地执行--它们不需要知道彼此的位置.或在继续执行前不需要等待 ...

最新文章

  1. 对称加密DES和TripleDES
  2. Java动态代理代码案例:使用jdk自带的Proxy只能对有接口的类进行动态代理
  3. js如何实现扫描身份证识别_如何识别身份证上信息?快速录入看这招
  4. VUE安装依赖命令总结
  5. 导入一个android项目需要改什么意思,导入别人的Android Studio项目前要修改的文件...
  6. ActiveMQ入门实例
  7. pushpop指令的操作数必须是字操作数_PLC的指令,电气人必须了解的基础内容
  8. Multi GET API介绍
  9. Linux(Ubuntu)内存查询top命令详解
  10. 【注意力机制】SENet(Squeeze-and-Excitation Networks)详解
  11. 《季羡林先生》读书笔记-3
  12. 官方实锤!微软宣布以 75 亿美元收购 GitHub
  13. 用十句简单英语激活你的口语
  14. 深化代理模式,Mybaits如何做到调用接口
  15. Java基础:MySQL
  16. 使用stress,压力测试K8S的POD cpu
  17. 下载站源码 php,thinkphp开发素材资源源码下载站整站源代码
  18. rs232接口_为什么越来越多人用RS232接口,却还分不清DB9、DB25的引脚定义?
  19. Ignite 架构全面解析
  20. 适用于 Windows 10 的触摸板手势

热门文章

  1. 单模光纤最大传输距离为多少_单模光纤传输距离是多少?
  2. linux怎么看用的哪个网卡驱动,linux下如何查看网卡驱动版本信息?
  3. gif一键抠图 在线_在线抠图网站大全
  4. Linux压缩与解压缩文件或文件夹命令
  5. gitee创建仓库,并将代码上传到gitee上
  6. xp系统打印机服务器报错,win10系统连接xp系统共享打印机报错0x000004的具体方法...
  7. 内网,外网ip(路由器ip,公网ip)的分别以及如何查询
  8. git clone 的--single-branch和--depth参数
  9. python改变图片透明度_Python PIL.Image之修改图片背景为透明
  10. 大学物理笔记——第二章质点动力学