MQ

引入

消息队列

简单理解就是把要传输的数据放在队列中

生产消息的叫生产者,从队列中消费消息的叫消费者

好处:解耦、削峰、异步

缺点:引入更多的外部依赖降低了系统可用性,增加了系统复杂性、同时带来消息一致性问题

消息队列

队列 :先进新出

 

 java中已经有不少队列的实现,但是都是简单的内存队列,而消息中间件要考虑高可用,数据丢失等问题

优势

解耦

比如系统A对接多个其他系统,任何一个其他系统对A系统的需求发生改变都需要变更A系统

使用消息队列,A系统只负责把其他系统需要的数据存放在队列中,谁要谁拿,系统A不需要时长被动的去做出更改,以做到解耦

 

异步

同步调用会增加系统整体的耗时,而且取决于耗时最长的部分,对于注重吞吐量的业务来说,异步调用能够缩短服务调用时间,对于不需要等待返回值的调用,像删除日志记录这种,使用异步调用会更好

 

削峰/限流

上游短时间过多的请求可能会使下游系统超负荷,如果缓存到消息队列中,下游系统可以根据自己的实际能力去逐步处理请求

 

需要考虑的问题

高可用

消息队列不能是单机的,万一这台机器挂了,整个系统都将不可用

 

 

数据丢失问题

 将数据写到队列上,下游还没来得及消费,队列就挂掉了(一般MQ中间件为了提高系统的吞吐量会把消息保存在内存中

消息队列中的数据需要有别的地方存储,像redis一样

 

怎么得到队列数据?

生产者将数据放到消息队列纵,消息队列有数据了,主动叫消费者去拿(push)

消费者不断轮询消息队列,看有没有新的数据,如果有就消费(pull)

 

宕机后消息还存在吗?

 消息一般都是存放在内存中的,宕机后消息会丢失,需要持久化,存储到磁盘或者数据库

 

常用MQ

 

posted on 2023-03-16 00:36  or追梦者  阅读(33)  评论(0编辑  收藏  举报