【扫盲】消息队列

# 什么是消息队列

消息队列(Message Queue,简称MQ),从字面意思上看,本质是个队列,只不过队列中存放的内容是message而已。

“消息”是在两个独立个体间传送的数据单位。这两个个体可以是两台计算机,也可以是两个进程,也可以是一个进程的两个线程。

“消息”可以非常简单,例如只包含文本字符串;也可以更复杂,可能包含嵌入对象。

队列”是在消息的传输过程中的通道,是保存消息的容器,根据不同的情形,可以有先进先出,优先级队列等区别 。


# 为什么需要消息队列

两个原因,异步处理和解耦。

在数据高并发环境下,来不及同步处理,请求往往会发生堵塞现象,比如说,大量的insert,update之类的请求同时到达MySQL,直接导致无数的行锁表锁,甚至最后请求会越积越多,从而触发too many connections错误。

通过使用消息队列,我们可以异步处理请求,从而缓解系统的压力。

另外,非基于消息队列的系统,其运行速度取决于系统中最慢的组件的速度(注:短板效应)。

而基于消息队列可以将系统中各组件解除耦合,这样系统就不再受最慢组件的束缚,各组件可以异步运行从而得以更快的速度完成各自的工作。

除此之外消息队列也可以抑制性能波峰的产生,在瞬时业务增长产生时保持性能曲线的平滑。


# 栈和队列

概念很简单,栈 (Stack)是一种后进先出(last in first off,LIFO)的数据结构,而队列(Queue)则是一种先进先出 (fisrt in first out,FIFO)的结构,如下图:


What is Stack and Queue



评论

奥尔良烤鲟鱼堡:之前也看过不少有关此类的文章,但还是很迷糊。LZ的文章写得真好,对于吾等理解能力缺陷的程序员来说,就喜欢这类通俗易懂的文章,哈哈。
08月23日 18:28
唐尸三摆手:好文章,难得的好。
08月23日 20:58
兹基享:有山无水难成景,有酒无朋难聚欢;曾经沧海成桑田,情意交心亘不变;红梅飘香话思念,惹落雪花两三片;大好时光多缠绵,愿你快乐每一天!
08月23日 23:08
半盏:受教了!非常感谢楼主!
08月23日 23:44
柳丝刀:好文章,要顶
08月23日 23:47
独角兽才子:讲得很好吖,膜拜大佬
08月23日 23:50
08月24日 01:14
我想上天:幸苦了,写的很好。
08月24日 01:17
窗帘:感谢感谢!看完茅塞顿悟!
08月24日 05:18
纳兰性急:楼主功底不错,写得很好
08月24日 05:47

赞助商