RocketMQ系列之初识MQ

本人花费半年的时间总结的《Java面试指南》已拿腾讯等大厂offer,已开源在github ,欢迎star!

本文GitHub https://github.com/OUYANGSIHAI/JavaInterview 已收录,这是我花了6个月总结的一线大厂Java面试总结,本人已拿大厂offer,欢迎star

原文链接:blog.ouyangsihai.cn >> RocketMQ系列之初识MQ

前言

消息中间件是目前互联网项目应用特别广泛的一个中间件,主要用于处理异步操作,系统之间的应用解耦,以及并发下的流量削峰等等应用场景,今天开我们就进入消息中间件MQ的讲解,主流的MQ有很多,我们只需要掌握其中一种就可以了,基本都大同小异,OK,正式开始今天的MQ之旅。

RocketMQ系列之初识MQ

什么是MQ?

MQ(Message Queue)消息队列,是一种应用程序之间通信的方式,可以理解为一个存放消息的队列,生产者负责生产消息,并将生产的消息存放入队列中,消费者负责从队列中获取对应的消息进行消费,生产者无需关心消息是否被消费,只需要关心是否将消息正确的存入队列即可,同样消费者也无需关心消息从哪生产或者说消息是否生产成功,只需要正确的处理消息即可,以这样一种方式实现了生产者和消费者之间的完全解耦。

RocketMQ系列之初识MQ RocketMQ系列之初识MQ

MQ有什么作用?

异步:可以将某些业务逻辑,进行异步处理,加快用户响应时间

解耦:可以将某些业务逻辑拆分,通过MQ进行多个系统之间业务解耦

RocketMQ系列之初识MQ

流量削峰:在并发情况下,可以将瞬间流量访问写入MQ,然后开启多个消费者处理消息,达到减压削峰的效果

RocketMQ系列之初识MQ

日志处理:日志收集直接写入消息队列,消费者端订阅消费处理日志,生成可视化监控数据

RocketMQ系列之初识MQ RocketMQ系列之初识MQ

主流的MQ有哪些?

主流的MQ有很多,网上的总结对比也有很多在,这里我就你不去一一列举了,下面列几个业界比较火的MQ简单对比下:

特性

ActiveMQ

RabbitMQ

RocketMQ

Kafka

API完备性

多语言支持

支持

支持

JAVA

支持

单机吞吐量

万级

万级

万级

十万级

消息延迟

毫秒

微秒

毫秒

毫秒

可用性

高(主从)

高(主从)

非常高(分布式)

非常高(分布式)

消息丢失

理论上不会

理论上不会

文档完备性

社区活跃度

成熟度

成熟

成熟

比较成熟

成熟

集群

支持

支持

支持

支持

负载均衡

支持

支持

支持

支持

特点

功能齐全、被大量开源项目使用

Erlang语言开发,性能很好

各环节分布式扩展设计,主从HA,支持上万个队列,性能很好

吞吐量很高

评价

优点:成熟的产品,已经在很多公司得到应用,各种协议支持较好,有多种语言成熟的客户端。

缺点:会出一些莫名其妙的问题,会丢消息,笔试和上千队列,目前社区活跃度不高,5.X后维护较少。

优点:由于erlang语言的特性,性能很好,管理界面较为丰富,在互联网公司都有较大规模的应用。

缺点:erlang语言难度大,不支持动态扩展

优点:模型简单,接口易用,阿里内部大规模成功应用。

缺点:产品较新,文档比较缺乏,没有实现JMS接口规范

日志领域应用广泛

RocketMQ系列之初识MQ

RocketMQ是什么?

RocketMQ是一款分布式、队列模型的消息中间件,天生自带分布式,负载(这里后面会介绍),生产者Producer和消费者Consumer以及队列都可以分布式,Producer向队列轮流发送消息,队列的集合称为主题Topic,Consumer有2种消费模式:

  • 广播消费:一个Consumer实例消费这个Topic对应的所有队列
  • 集群消费:多个Consumer实例平均消费这个Topic对应的所有队列
  • 集群消费:多个Consumer实例平均消费这个Topic对应的所有队列

    工作模式如下图所示:

    RocketMQ系列之初识MQ

    物理部署结构如下图:

    RocketMQ系列之初识MQ RocketMQ系列之初识MQ

    RocketMQ的特点?

  • 能够保证严格的消息顺序
  • 提供丰富的消息拉取模式
  • 高效的订阅者水平扩展能力
  • 实时的消息订阅机制
  • 亿级消息堆积能力
  • 较少的依赖

  • 提供丰富的消息拉取模式

    实时的消息订阅机制

    较少的依赖

    RocketMQ系列之初识MQ

    RocketMQ的优势?

  • 强调集群无单点,可扩展,任意一点高可用,水平可扩展
  • 海量消息堆积能力,消息堆积后,写入低延迟
  • 支持上万个队列
  • 消息失败重试机制
  • 消息可查询
  • 开源社区活跃
  • 比较成熟稳定,经过阿里多次双十一验证
  • 海量消息堆积能力,消息堆积后,写入低延迟

    消息失败重试机制

    开源社区活跃

    MQ的简单认识就到这,下节开始我们正式讲解如何玩转RocketMQ,欢迎阅读,让我们一起沉浸在MQ的世界里!!!

    RocketMQ系列之初识MQ

    原文始发于微信公众号(Justin的后端书架):

    本人花费半年的时间总结的《Java面试指南》已拿腾讯等大厂offer,已开源在github ,欢迎star!

    本文GitHub https://github.com/OUYANGSIHAI/JavaInterview 已收录,这是我花了6个月总结的一线大厂Java面试总结,本人已拿大厂offer,欢迎star

    原文链接:blog.ouyangsihai.cn >> RocketMQ系列之初识MQ


     上一篇
    RocketMQ系列之入门 RocketMQ系列之入门
    前言 这几天把服务器上环境重新装了下,由于项目也比较忙,所以更新比较慢,上节我们把RMQ的多Master集群搭建起来了,我们今天就来看看如何向这个集群生产消息以及消费消息。 集群搭建回顾 回顾上节的内容,我总结下以下几步: 第一:
    下一篇 
    RocketMQ系列之集群搭建 RocketMQ系列之集群搭建
    前言 上节我们对RocketMQ(以下简称RMQ)有了一些基本的认识,大致知道了,什么是RMQ以及他能做什么,今天我们来讲讲如何搭建RMQ,与其说搭建RMQ不如说是搭建RMQ集群,为什么这么说呢?看完这篇文章自然就懂了。 RMQ几