消息队列,一般我们会简称它为MQ(Message Queue)
科普:
把数据放到消息队列叫做生产者
从消息队列里边取出数据叫做消费者
一、为什么要用消息队列?
1、解耦
系统A将userId写到消息队列中,系统C和系统D从消息队列中拿数据。这样有什么好处?
- 系统A只负责把数据写到队列中,谁想要或不想要这个数据(消息),系统A一点都不关心。
- 即便现在系统D不想要userId这个数据了,系统B又突然想要userId这个数据了,都跟系统A无关,系统A一点代码都不用改。
- 系统D拿userId不再经过系统A,而是从消息队列里边拿。系统D即便挂了或者请求超时,都跟系统A无关,只跟消息队列有关。
这样一来,系统A与系统B、C、D都解耦了。
2、异步
系统A执行完了以后,将userId写到消息队列中,然后就直接返回了(至于其他的操作,则异步处理)。
3、 削峰/限流
- 本来整个请求需要用950ms(同步)
- 现在将调用其他系统接口异步化,从请求到返回只需要100ms(异步)
系统B和系统C根据自己的能够处理的请求数去消息队列中拿数据,这样即便有每秒有8000个请求,那只是把请求放在消息队列中,去拿消息队列的消息由系统自己去控制,这样就不会把整个系统给搞崩。
文章来源于 http://developer.51cto.com/art/201904/595020.htm