Bootstrap

消息队列

消息队列(参考自知乎

消息队列的通俗解释:
小红希望小明多读书,常寻找好书给小明看,之前的方式是这样:小红问小明什么时候有空,把书给小明送去,并亲眼监督小明读完书才走。久而久之,两人都觉得麻烦。
后来的方式改成了:小红对小明说「我放到书架上的书你都要看」,然后小红每次发现不错的书都放到书架上,小明则看到书架上有书就拿下来看。

这样做的好处是:
1.小红想给小明书的时候,不必问小明什么时候有空,亲手把书交给他了,小红只把书放到书架上就行了。这样小红小明的时间都更自由。

2.小红相信小明的读书自觉和读书能力,不必亲眼观察小明的读书过程,小红只要做一个放书的动作,很节省时间。

3.当明天有另一个爱读书的小伙伴小强加入,小红仍旧只需要把书放到书架上,小明和小强从书架上取书即可(唔,姑且设定成多个人取一本书可以每人取走一本吧,可能是拷贝电子书或复印,暂不考虑版权问题)。

4.书架上的书放在那里,小明阅读速度快就早点看完,阅读速度慢就晚点看完,没关系,比起小红把书递给小明并监督小明读完的方式,小明的压力会小一些。

这就是消息队列得到四大好处:
1:解耦:
每个成员不必受其他成员影响,可以更独立自主,只通过一个简单的容器来联系。

小红甚至可以不知道从书架上取书的是谁,小明也可以不知道往书架上放书的人是谁,在他们眼里,都只有书架,没有对方。

毫无疑问,与一个简单的容器打交道,比与复杂的人打交道容易一万倍,小红小明可以自由自在地追求各自的人生。

2:提速
小红利用空闲时间把书放在书架上,节省了大量的时间,提高了工作效率。

3:广播
小红每放一次书,其他人就可以在书架上自己那书看了,即使有新的小伙伴加入,也不会影响效率。

4:削峰

原本小红需要监督小明读完每一本书,然后再送其他的书,但是有了书架以后就可以不定频率的去送书了,缓解了双方的压力。

使用消息队列的条件
1:生产者不需要从消费者那里获得反馈,使用异步的方式进行处理。
小红放完书以后,默认小明会看的,但是小明到底看没看小红是不知道的。

2:允许短暂的不一致性
小明有时候有些书并没有看,妈妈会默认他看了,因为妈妈觉得即使他现在比较忙没时间看,后面也会看完的。

3:解耦,提速,广播,削峰确实带了效果,而且效果要大于因为加入队列而增加的额外负担,在这个例子中就是有了书架带来的便利要大于书架本身的成本。

;