美文网首页分布式开发
理解消息队列 - 使用场景简介

理解消息队列 - 使用场景简介

作者: 殷天文 | 来源:发表于2019-06-23 23:04 被阅读82次

    在之前的 Java 理解生产者-消费者设计模式 一文中,我们学习了生产者-消费者模式,生产者和消费者之间通过一个缓冲队列进行通讯,即做到了异步消息吞吐,又使得程序解耦

    可以说,使用 MQ(消息队列) 可以在分布式环境中实现生产者-消费者模式

    适合MQ使用的场景

    • 消息的发送者和消费者需要解耦的情况
    • 异步处理
    • 多个消费者(消息的关注者不止一个)
    • 消费者的处理结果不返回给发送者 (以RabbitMQ为例,虽然可以做到RPC调用,但是这种调用会带来更多的麻烦)
    • 削峰填谷

    下面我跟详细分析一下各种使用场景

    解耦

    image.png

    其实很好理解,因为生产者和消费者通过MQ进行通讯,可以说两者没有什么直接的瓜葛,必然解耦

    异步 && 多个消费者

    生产者只负责把消息发布,并在意谁处理消息,可能会有多个消费者处理该消息

    例如用户注册,我们会给用户发送注册邮件和短信(可以把邮件和短信理解为多个消费者服务)

    传统方式,图片来源网络 使用MQ,图片来源网络

    可以看到在使用了MQ,即可以通过异步处理的方式,降低响应时间,又可以降低业务之间的耦合度

    消费者的处理结果不返回给发送者

    线程池和MQ都可以看成 生产者-消费者模式的实现,而这两者也都可以获得消费者的返回值。但是如果你这样做的话,你的生产者线程会阻塞(等待消费者的返回),没法做到完全异步的处理,有些违背了生产者-消费者模式的初衷。而且还要考虑等待超时后的处理。但是不能说这种用法是不对的,具体业务具体分析

    削峰填谷

    何为削峰填谷,可以理解为流量控制。例如在抢票,秒杀等业务场景时,可能会突然有大量的请求涌入。但是我们的服务器资源有限,并不能处理这么多的请求,此时可以使用 MQ进行流量控制

    图片来源网络

    因为,请求都缓存在了MQ中,下游服务可以根据自己的速度进行处理。

    参考

    https://www.kancloud.cn/cosmicyang/rabbitmq/824050

    相关文章

      网友评论

        本文标题:理解消息队列 - 使用场景简介

        本文链接:https://www.haomeiwen.com/subject/crwtfctx.html