在最近的工作的里面有同事问到我说,为什么我们需要一个Message Queue,Message Queue可以在哪些地方用,经过一些整理,大概能找到这些点,假如你有这方面的要求,也可以考虑使用Message Queue。
异步通信
很多时候,我们都不需要立即处理消息,或处理消息的时间过长,我们不希望用户一直等待。比如京东的优惠券的发放,你领取优惠券后,告诉你5~10分钟到账,就是这个道理。Message Queue就能帮你实现异步通信,你将消息放入队列,不立即处理他们,另外的服务再慢慢的从队列取数据,一个个的处理。
保证顺序
很多场景下,处理消息的顺序是很重要的,消息队列就能帮你做到这点。
缓冲
各种抢票耍猴网站,搞的手机抢购大赛,你可以将这些请求统统放入消息队列,然后再结合自己的耍猴天分,开发各种耍猴的政策,目的就是浪费抢购人的时间。要做这个,消息队列可以帮助你,就算是突然猛增的流量,也只是放入队列,并不立即处理,所以能减轻系统其他部分的压力。
成功保证
你要保证用户的某种操作能够成功。消费消息队列的时候,当成功了,给队列一个返回值,队列帮你把这条消息移出对列。如果没有成功,那你就不告诉队列已经成功,这个任务就一直在队列里面,等待下一次的处理。
同时这也算是一种弹性的设计,假如处理消息队列的服务崩溃了,更多的消息仍然可以进入队列,等处理消息的服务重启后,重新接着上次的任务走。
解耦系统
消息队列也能帮你解耦系统,你只需要发出消息,不用关心消息如何处理。另一方面,如果你是消息的接受方,也不需要知道消息从何而来,干你的事情就得了,于是系统之间相对比较独立。
暂时能想到这么多,目前知道的消息队列不少,像Apache ActiveMQ, MSMQ, RabbitMQ, OpenAMQ, ZeroMQ, DotNetMQ,各有不同,按需选择吧。