美文网首页MQ
01-MQ消息队列

01-MQ消息队列

作者: 紫荆秋雪_文 | 来源:发表于2021-07-04 08:40 被阅读0次

一、什么是MQ

MQ(Message Queue)本质是个队列,只不过队列中存放的内容是message而已,还是一种跨进程的通信机制,用于上下游传递消息。在互联网架构中,MQ是一种非常常见的上下游“逻辑解耦+物理解耦”的消息通信服务

二、为什么要用MQ

1、流量消峰

例如在正常情况订单系统最多可以处理一万次订单,但是在高峰期,如果有两万次下单情况下订单系统是处理不了的。
  • 方式一,只能限制订单超过一万以后不允许用户下单,这样体验较差
  • 方式二,使用消息队列做缓冲,无需限制用户下单,把一秒内下的订单分散成一段时间来处理,这会造成用户延时收到订单成功操作,但是这比方式一要好一些

2、应用解耦

以电商引用为例,应用中有订单系统、库存系统、物流系统、支付系统。用户创建订单后,如果耦合调用库存系统、物流系统、支付系统,任何一个系统出现了故障,都会造成下单操作异常。 image.png
  • 使用消息队列应用解耦,上述系统间不会直接调用而是通过消息队列,如果某个系统停止一段时间并不会阻塞其他系统业务,而该系统的消息也不会丢失,当该系统重启后还可以继续处理堆积的消息任务


    image.png

3、异步处理

有些服务间调用是异步的,例如 A 调用 B,B需要花费很长时间执行无法立即给 A 响应,但是 A 需要知道 B 的执行响应
  • 方式一,A过一段时间再去调用 B 的查询 API 查询
  • 方式二,A提供一个 CallBack API,B 执行完之后调用 API 通知 A
  • 方式三,使用消息队列,可以很方便解决这个问题,A 调用 B 服务后,只需要监听 B 处理完成的消息就可以了,当 B 服务执行完毕后,发送一条消息给 MQ,A 会监听到MQ中的消息 image.png

三、MQ的分类

1、ActiveMQ

优点:单机吞吐量万级,时效性ms级,可用性高,基于主从架构实现高可用性,消息可靠性较低的概率丢失数据
缺点:维护越来越少

2、kafka

大数据的杀手锏,以其百万级TPS的吞吐量名声大噪,迅速成为大数据领域宠儿

优点
  • 性能卓越,单机写入TPS约在百万条/秒,最大的优点,就是吞吐量高
  • 时效性 ms 级可用性非常高
  • kafka是分布式的
  • Web管理界面 kafka-Manager
  • 在日志领域比较成熟
缺点
  • 单机超过 64 个队列/分区,load会发生明显的飚高现象,队列越多,load越高,发送消息响应时间变长
  • 消息失败不支持重试
  • 支持消息顺序,但是宕机后就会产生消息乱序

3、RocketMQ

RocketMQ 出自阿里巴巴的开源项目,使用Java实现

优点
  • 单机吞吐量十万级,可用性非常高,分布式架构,消息可以做到0丢失
缺点
  • 支持的客户端语言不多
  • 社区活跃度一般

4、RabbitMQ

2007年发布,是一个在AMQP(高级消息队列协议)基础上完成的,可服用的企业消息系统,是当前最主流的消息中间件之一

优点
  • 由于erlang语言的高并发特性,性能较好
  • 吞吐量万级
  • 功能比较完备,健壮,稳定,易用,跨平台,支持多语言
  • 社区活跃度高
缺点
  • 商业版需要收费

相关文章

  • 01-MQ消息队列

    一、什么是MQ MQ(Message Queue)本质是个队列,只不过队列中存放的内容是message而已,还是一...

  • 消息队列:消息队列简介

    1. 什么是消息队列 消息队列(message queue),是一种应用程序的通信方法; 消息队列是 生产者-消费...

  • 消息中间件

    消息中间件,也可以叫做中央消息队列或者是消息队列(区别于本地消息队列,本地消息队列指的是 JVM 内实现的队列实现...

  • 消息队列对比

    引用: 常用消息队列对比消息队列及常见消息队列介绍 常用消息队列 1. RabbitMQ 用erlang语言开发的...

  • 消息队列应用-使用异步队列就解耦了吗

    消息队列作用一文介绍了为什么要使用消息队列。我们再来讨论下如何有效使用消息队列。 消息队列模式 目前主流消息队列主...

  • Kafka常见问题解决

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

  • 进程间通信(下)

    消息队列 在UNP第二卷中详细介绍了两种消息队列:Posix消息队列和System V消息队列。这两种消息队列很相...

  • APUE读书笔记-15进程内部通信(6)

    7、消息队列 消息队列是存放在内核中的消息的链表,通过消息队列标识进行标记。我们把消息队列称为队列,把它的标识称为...

  • java消息机制

    1.什么是消息队列? 1.消息队列是一个队列,先进先出,你无法读取消息队列中间的消息,只能按照顺序,从消息队列的头...

  • springboot项目架构(4)activemq、rabbit

    消息队列实现 支持的消息队列 ActiveMq RabbitMq RocketMq Kafka 各个队列实现队列与...

网友评论

    本文标题:01-MQ消息队列

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