什么是消息队列中间件?
消息队列可以让各个应用之间使用发送消息这种方式来进行信息的传递,并且当目标应用正忙或者连接失败的时候,消息队列会提供一个暂时存储这些消息的空间,当目标应用可以工作时,从消息队列取出消息进行处理。
为什么要使用消息队列中间件?
平常在业务场景中,在客户端的一个行为通常会触发一系列的消息。例如,在用户登录客户端后,后台需要验证用户的登录信息,拉取用户的头像,用户昵称等,那么这些一系列的消息应该采用一种什么样的方式进行工作呢?
1. 串行工作方式。先从DB中拉取用户的头像,再从DB中拉取用户昵称等基本信息,结束后返回给客户端,但是会导致很大的网络延时。
2. 并行工作方式。同时拉取用户头像和昵称等基本信息,再返回至客户端,很好,我们缩短了一半时间了。
3. 异步方式。想象一下工作场景,用户的操作跟后台拉取头像和昵称一定有关吗?用户浏览新闻为什么一定要等拉取完用户昵称之后再开始?那么这个时候采用异步的方式就很有必要了,即客户端消息的发送不影响主逻辑的实现。这个时候,我们的消息队列中间件就闪亮登场了。
消息队列中间件简介
明确一些基本概念:
1. 队列:这里面存放着一堆待处理的事情。
2. 消息:发送方和接收方之间是通过消息来进行数据的传递,例如上述场景中的拉取用户昵称。
那么,消息队列就是存放着一堆待处理消息的大池子,客户端我们叫做生产者(producer),负责消息生产并扔进队列中,接收端我们叫做消费者(consumer),负责从队列中取消息并进行消息处理。
再说一下消息队列的解耦(Decoupling )。这个网上有资料讲,看文末参考资料。即两个应用之间完全不需要对方是怎么实现的,发送方只需要进行消息的发送和接受即可。如下图: