在百度百科中,消息队列是这么解释的:“消息队列”是在消息的传输过程当中保存消息的容器。redis
这个解释中的“消息”指的是在两台计算机间传送的数据单位。消息能够很是简单,例如只包含文本字符串;也能够更复杂,可能包含嵌入对象。消息被发送到队列中。数据库
“消息队列”是在消息的传输过程当中保存消息的容器。消息队列管理器在将消息从它的源中继到它的目标时充当中间人。队列的主要目的是提供路由并保证消息的传递;若是发送消息时接收者不可用,消息队列会保留消息,直到能够成功地传递它。异步
日常在工做中,咱们也经常使用消息队列,好比kafka、rabbitmq等,大多数公司基本上都有在用,固然也有使用redis来模拟消息队列的,固然那是不建议的方式。spa
下面根据我日常使用的场景以及网上的资料大致说下消息队列的经常使用场景。orm
消息队列的主要特色是异步处理,主要目的是减小请求响应时间和解耦。对象
主要的使用场景就是将比较耗时并且不须要当即生效返回结果的操做,咱们把这种操做做为一个消息,放到消息队列中。处理方能够在任什么时候候去获取并处理这条消息。这里咱们只要保证消息的格式不变,消息的发送方和接收处理方都认识这个消息,那么双方就不须要彼此通讯,便可以完成一件事。blog
固然,若是咱们使用消息队列的话,也有许多须要注意的点。好比,消息的发送方不须要接收方当即返回处理结果,不然的话只能等待处理结果;好比系统会有短暂的不一致性,发送方不可预知接收方什么时间处理完这个消息。固然,实际生产中仍是有须要地方容许这些好比的,因此消息队列如今是异常的火爆。rabbitmq
下面举一个网上的例子(自我感受,很是的生动形象):队列
假设用户在软件中注册,服务端收到用户的注册请求后,它会作这些操做:路由
校验用户名等信息,若是没问题会在数据库中添加一个用户记录若是是用邮箱注册会给你发送一封注册成功的邮件,手机注册则会发送一条短信分析用户的我的信息,以便未来向他推荐一些志同道合的人,或向那些人推荐他发送给用户一个包含操做指南的系统通知等等……
可是对于用户来讲,注册功能实际只须要第一步,只要服务端将他的帐户信息存到数据库中他即可以登陆上去作他想作的事情了。至于其余的事情,服务端就能够把其余的操做放入对应的消息队列中而后立刻返回用户结果,由消息队列异步的进行这些操做。