“消息队列”是在消息的传输过程中保存消息的容器。消息队列,一般我们会简称它为MQ(Message Queue)
我们先不管消息(Message)这个词,来看看队列(Queue)。
队列是一种先进先出的数据结构。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:


二、为什么要用消息队列?
为什么要用消息队列,也就是在问:用了消息队列有什么好处。
1.通过异步处理提高系统性能(削峰、减少响应所需时间);
2.降低系统耦合性。
(1) 通过异步处理提高系统性能(削峰、减少响应所需时间)

通过以上分析我们可以得出消息队列具有很好的削峰作用的功能——即通过异步处理,将短时间高并发产生的事务消息存储在消息队列中,从而削平高峰期的并发事务。
举例:在 各种稀缺资源(火车票,打折商品)的抢购 中,合理使用消息队列可以有效抵御促销活动刚开始大量订单涌入对系统的冲击。
(2) 降低系统耦合性
如果模块之间不存在直接调用,那么新增模块或者修改模块就对其他模块影响较小,这样系统的可扩展性无疑更好一些。


我们最常见的事件驱动架构类似生产者消费者模式,在大型网站中通常用利用消息队列实现事件驱动结构。
另外为了避免消息队列服务器宕机造成消息丢失,会将成功发送到消息队列的消息存储在消息生产者服务器上,等消息真正被消费者服务器处理后才删除消息。
在消息队列服务器宕机后,生产者服务器会选择分布式消息队列服务器集群中的其他服务器发布消息。
原文:https://www.cnblogs.com/51try-again/p/11109475.html