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

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

作者: 殷天文 | 来源:发表于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

相关文章

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

    在之前的 Java 理解生产者-消费者设计模式 一文中,我们学习了生产者-消费者模式,生产者和消费者之间通过一个缓...

  • 消息队列简介及使用场景

    笔者所有文章第一时间发布于:hhbbz的个人博客 消息队列的使用场景 校验用户名等信息,如果没问题会在数据库中添加...

  • 消息队列

    消息队列 为什么使用消息队列 使用消息队列的主要场景:解耦、异步、削峰。 解耦 适合场景:系统的数据需要发送给多个...

  • Kafka常见问题解决

    概要:我们使用消息队列,就需要知道为什么要用消息队列,什么场景需要用消息队列,使用消息队列能带来哪些好处和消息队列...

  • 高并发架构消息队列

    为什么使用消息队列 其实就是问问你消息队列都有哪些使用场景,然后你项目里具体是什么场景,说说你在这个场景里用消息队...

  • 关于使用消息队列今天被面试官问倒了

    为什么使用消息队列 其实就是问问你消息队列都有哪些使用场景,然后你项目里具体是什么场景,说说你在这个场景里用消息队...

  • 小白入门微服务(2) - 消息队列初体验

    概述 前言 消息队列使用场景 什么是消息队列 常用消息队列库对比 Kafka 初体验 RabbitMQ 初体验 后...

  • 关于MQ,你必须知道的

    OK那么消息队列MQ有什么套路呢? 使用消息队列场景和好处 使用消息队列会带来什么问题,有什么解决方案 如何使用M...

  • 消息队列Mq常见知识点

    1. 项目中怎么使用消息队列的? 举例业务场景。 2. 为什么使用消息队列? 解耦、异步、削峰。 3. 消息队列都...

  • 消息队列 - 消息队列的使用场景

    学习完整课程请移步 互联网 Java 全栈工程师 校验用户名等信息,如果没问题会在数据库中添加一个用户记录 如果是...

网友评论

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

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