“消息队列”是在消息的传输过程当中保存消息的容器。消息队列,通常咱们会简称它为MQ(Message Queue)python
咱们先无论消息(Message)这个词,来看看队列(Queue)。web
队列是一种先进先出的数据结构。python用list 实现队列。数据库
class Queue: def __init__(self): self.items = [] def isEmpty(self): return self.items == [] def enqueue(self, item): self.items.insert(0, item) def dequeue(self): if self.isEmpty(): return None return self.items.pop() def size(self): return len(self.items)
在Python里边,已经实现了很多的队列了,好比 queue模块中的 Queue,Collections中的deque:服务器
2、为何要用消息队列?网络
为何要用消息队列,也就是在问:用了消息队列有什么好处。数据结构
1.经过异步处理提升系统性能(削峰、减小响应所需时间);架构
2.下降系统耦合性。并发
(1) 经过异步处理提升系统性能(削峰、减小响应所需时间)异步
经过以上分析咱们能够得出消息队列具备很好的削峰做用的功能——即经过异步处理,将短期高并发产生的事务消息存储在消息队列中,从而削平高峰期的并发事务。分布式
举例:在 各类稀缺资源(火车票,打折商品)的抢购 中,合理使用消息队列能够有效抵御促销活动刚开始大量订单涌入对系统的冲击。
(2) 下降系统耦合性
若是模块之间不存在直接调用,那么新增模块或者修改模块就对其余模块影响较小,这样系统的可扩展性无疑更好一些。
咱们最多见的事件驱动架构相似生产者消费者模式,在大型网站中一般用利用消息队列实现事件驱动结构。
另外为了不消息队列服务器宕机形成消息丢失,会将成功发送到消息队列的消息存储在消息生产者服务器上,等消息真正被消费者服务器处理后才删除消息。
在消息队列服务器宕机后,生产者服务器会选择分布式消息队列服务器集群中的其余服务器发布消息。