【云驻共创】消息队列(mq)是什么?

举报
架构师聊技术 发表于 2021/09/22 16:02:06 2021/09/22
【摘要】 消息队列是什么,或者说什么是消息队列、你用过哪些消息队列,几乎是在求职面试中经常问到的问题,我自己也经常问面试者这个问题,简单说消息队列是一个能先进先出且存储消息的容器。

消息队列是什么,或者说什么是消息队列、你用过哪些消息队列,几乎是在求职面试中经常问到的问题,我自己也经常问面试者这个问题,简单说消息队列是一个能先进先出且存储消息的容器。

基本组成部分

​ 基本的消息队列主要有生产者(Producer)、代理(Broker)、消费者(Consumer)组成。

  1. 生产者:消息的产生者,消息的调用端,主要负责消息具体承载的信息的实例化,具体一个队列的发起方
  2. 代理:队列的大脑,主要的处理单元,负责消息的存储、投递、及各种队列附加功能的实现,是消息队列最核心的组成部分
  3. 消费者:一个消息队列的终端,也是消息的调用端,具体是根据消费的消息承载的信息,处理各种业务业务逻辑

​ 目前市场上常用的MQ中间件基本上都是基于这3个主要的基础组件扩展而成的,尤其是扩展代理,比如延迟队列、主题 等等

使用场景

​ 消息队列使用的场景非常多,常见的有异步处理、应用解耦、流量削峰等等

  1. 异步处理

    ​ 异步处理主要应用于对实时性要求不严格的场景,比如:用户注册发送验证码、下单通知、发送优惠券等等。A服务只需要把协商好的消息发送到消息队列,剩下的有消费消息的服务去处理就好,不用等待消费服务返回结果。

  2. 应用解耦

    ​ 应用解耦可以看作是把相关但耦合度不高的系统联系起来,比如,订单系统与WMS、EHR系统,有关联但又不是哪么紧密,每个系统之间只需要把约定的消息发送到MQ,另外的系统去消费即可,同时也解决了各个系统可以采用不同的架构、语言来实现,极大的增加了整个大系统的灵活性。

  3. 流量削峰

​ 流量削峰一般应用在大流量入口且短时间内业务需求处理不完的服务中心,为了权衡高可用,把大量的并行任务发送到MQ中,依据MQ的存储及分发功能,平稳的处理后续的业务,起到一个大流量缓冲的作用。

常见消息队列

​ 目前常见的消息队列有ActiveMQ、RabbitMQ、Kafka、RocketMQ。但真正项目中使用的是后3种,ActiveMQ在实际的项目中并不常用,一般作为教程了解原理还是不错的。另外要说明的是下列对比的表格并不完整,比如:RabbitMQ支持死信队列,RocketMQ支持事务消息,还有跟Kafka对标的的Pulsar,并没有列出,想具体了解每个MQ,建议针去查看官方资料。

特性 ActiveMQ RabbitMQ Kafka RocketMQ
PRODUCER-COMSUMER 支持 支持 支持 支持
PUBLISH-SUBSCRIBE 支持 支持 支持 支持
REQUEST-REPLY 支持 支持 - 支持
API完备性 低(静态配置)
多语言支持 支持,JAVA优先 语言无关 支持,JAVA优先 支持
单机呑吐量 万级 万级 十万级 单机万级
消息延迟 - 微秒级 毫秒级 -
可用性 高(主从) 高(主从) 非常高(分布式)
消息丢失 - 理论上不会丢失 -
消息重复 - 可控制 理论上会有重复 -
文档的完备性
提供快速入门
首次部署难度 -

总结

​ 在现在的项目中,不管是TO C还是TO B ,消息队列(MQ)几乎是标配的中间件,建议在熟悉原理的基础上,并能清楚每种消息中间件的不同点,这样才能根据业务需求的场景更有效的采用合适的中间件。知识的积累在于沉淀,我们共同进步,做新时代的农民工。

本文整理自华为云社区内容共创活动,消息队列(mq)是什么?,查看活动详情

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。