• RabbitMQ——消息队列的作用(面试)


    消息队列(MQ)

    队列(Queue)

    是一种“先进先出”数据机构,开发人员最早接触的队列,应该是LinkedList,LinkedList除了是List,也是一个Queue(实际上还是一个stack)。队列的作用,就像生活中买东西,需要排队,先排的人先买消费。

    (先后顺序,并不一定是排队的先后,可以由其它权值判断,比如:要求长得高的人先消费。详细可以搜索词条“优先队列”)

    消息队列(Message Queue)

    简称是MQ,是message queue的缩写,直译就是消息队列(日常沟通可能直接称之为Q)。

    Message Queue 在 Queue 的基础功能上,增加了很多新的特性:

    1、观察者模式:感觉但凡消息队列,都具备这个特征:A负责生产数据,B负责消费数据。利用这个特性,可以实现很多功能,例如:应用解耦,数据总线。

    2、异步

    3、数据缓存:队列本身属于数据存储结构,对于无法立即处理的消息,可以暂存在队列中,利用这种特征,可以用于实现 “流量消峰填谷”的功能。

    常见的应用场景

    应用解耦、消息分发

    (观察者模式的应用)
    对于一些大型项目,某些数据一旦产生,可能会有无数个下游系统关注这些数据,主系统不可能给所有的子系统推送消息,子系统应当主动地选择数据进行订阅。
    案例:订单数据,商品一旦下单,物流、购物车、报表统计等等,都需要获取这些数据。

    数据总线

    如果用过EventBus的话,会更容易理解。和第一点的说法非常像,不过是属于更小的应用,就比如微服务,详见spring-boot-starter-amqp。

    案例:A同事开发一个项目,B同事开发另一个项目,A和B业务上发生耦合了,使用消息队列的情况下,双方只要协商好数据格式即可,一个人只要负责往队列发送数据,另一个人只要负责消费。

    流量消峰填谷

    (缓存的作用)
    在短时间内,可能会产生大量的数据,服务器无法及时消化这些数据,这时候,先暂时缓存这些数据,等到服务器资源闲置时,再处理这些数据。

    异步

    严格上说,这并不算优点,优缺点并存,优点是如果无需关注数据是如何消费的,推送之后可以及时释放资源,而缺点,就是处理业务时,需要时刻关注状态的变化。

    案例:以文件解压缩为例,A线程发现文件,将文件信息推送到队列中,等待压缩,B线程也发现这个文件,并且执行相同的操作,
    文件从“发现”到“解压成功”的时间里,文件处于将要处理而未处理的特殊状态,“异步”需要我们时时刻刻关注这种状态的变化。

  • 相关阅读:
    【Python五篇慢慢弹(3)】函数修行知python
    【Python五篇慢慢弹】数据结构看python
    【项目管理】GitHub使用操作指南
    【Python五篇慢慢弹】快速上手学python
    【NLP】十分钟快览自然语言处理学习总结
    【NLP】条件随机场知识扩展延伸(五)
    【NLP】基于统计学习方法角度谈谈CRF(四)
    【NLP】基于机器学习角度谈谈CRF(三)
    【NLP】基于自然语言处理角度谈谈CRF(二)
    【NLP】前戏:一起走进条件随机场(一)
  • 原文地址:https://www.cnblogs.com/chenss15060100790/p/16007555.html
Copyright © 2020-2023  润新知