• 消息队列的概念、原理和场景

消息队列概念:

         队列结构的中间件

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

         按照顺序进行逐步处理

核心结构:

 

消息队列应用场景

1、冗余(订单系统  后续需要严格的进行数据转换和记录  消息队列可以把这些数据持久化的存储在队列中,然后由订单后继处理程序进行获取,获取进行完成之后,再把这条记录进行删除,保证每一条数据都能够处理完成

2、解耦(系统解耦,消息队列分为两套系统,解决两套系统之间深度耦合的问题,使用消息队列后入队的系统和出队的系统没有之间的关系,其中一套系统奔溃的时候都不会影响到另一套系统的正常运转,比如:订单系统当前台奔溃后,不会影响到其他财务系统  各种系统的正常运转)

3、流量削峰(秒杀、抢购,会出现非常明显的流量剧增,大量的需求集中在短短的几秒钟之内,对服务器的瞬间压力非常大,防止服务器导致奔溃)

4、异步通信

5、扩展性 (订单之后 会有财务.......)

6、排序保证 (处理顺序  单线程单进单出,保证数据按照顺序进行处理)

 

————————————————————————————————消息队列相当于中间件,需要灵活去使用哦~~——————————————————————————————

消息队列优点和缺点:

队列介质:Mysql

                  Redis

                  消息系统

消息处理触发机制

                 1、死循环方式读取:易实现,故障时无法及时恢复 

                 2、定时任务:压力均分,有处理量上限 (订单系统、物流系统)

                 3、守护进程:类似php-fpm和php-cg,需要shell基础 

 

 

 

  • 解耦案例∶队列处理订单系统和配送系统

解耦案例:队列处理订单系统和配送系统架构设计

程序流程:对列表设计

架构设计:

 

 程序流程:

 

 

 

  • 流量削峰案例:Redis的List类型实现秒杀

 

 

 

  • RabbitMQ:更专业的消息系统实现方案