php高级技能之消息队列

为什么,是什么,怎么做?

1:为什么要有消息队列(MQ)?。

    主要原因是由于在高并发环境下,由于来不及同步处理,请求往往会发生堵塞,比如说,大量的insert,update之类的请求同时到达mysql,直接导致无数的行锁表锁,甚至最后请求会堆积过多,从而出发too many connections错误。通过使用消息队列,我们可以异步处理请求,从而缓解系统的压力。

2:MQ是什么?

    消息队列本质上就是一种数据结构(对象也可以看做是一种特殊的消息),它包含消费者与服务双方都能识别的数据,这些数据需要在不同的进程(机器)之间进行传递,不可能会被多个完全不同的客户端消费。在众多的分布式技术中,消息传递相较文件传递与远程调用(RPC)而言,似乎更胜一筹,因为它具有更好的平台无关性,并能够很好地支持并发与异步调用。对于Web Service和RESTful而言,可以看做是消息传递技术的一种衍生或封装。

    简单的来讲:当初看操作系统时,看到一句话,编程中任何困难都可以通过添加一层膜(中间层)来解决,消息队列也是生产者(消息生产者)和消费者(消息的使用者)中间的一层膜。

3:MQ怎么实现?

        php的例子代码有时间补上,待续...

4:备注

实际应用比如:

      流量削峰的redis的list类型实现秒杀,解耦案例的订单系统和配送系统

消息队列有很多种模式,这里提一种:

        发布者-订阅者(Publisher-Subscriber)模式:一旦消息通道需要支持多个消费者时,就可能面临两种模型的选择:拉模型与推模型。拉模型是消费者主动发起,主动权在消费者手中,它会根据自己的情况对生产者发起调用。推模型中,消费者不需要了解生产者,生产者通知消费者时,传递的往往是消息,而非生产者自身。同时,生产者还可以根据不同的情况,注册不同的消费者,又或者在封装的通知逻辑中,根据不同的状态变化,通知不同的消费者。

参考文章:https://www.cnblogs.com/xuyatao/p/6864109.html



猜你喜欢

转载自blog.csdn.net/mazhaer/article/details/80837201