1.RocketMQ介绍和基本概念

RocketMQ是阿里巴巴开源的一款消息系统中间件,现已捐赠给apache基金会。

一.项目主页

二.消息队列的主要作用和场景

1.应用解耦

在中大型电商系统中,商品系统,交易系统,支付系统等都属于单独的应用或服务,两个系统通信可能是依赖于接口服务,也可能是依赖于消息队列。如果其中一个系统的某个服务依赖于另一个系统的某个服务,当依赖的服务出现问题时,如果采用接口这种形式(同步形式),可能导致原依赖的应用的某个功能不可用。

例如:库存服务和订单服务(有的电商系统是下单减库存,有的电商系统是支付减库存,其实对于技术实现,并无本质差异)

  • 传统流程:

电商系统下单减库存流程

  • 使用MQ流程:

下单减库存应用解耦后的流程

2.流量削峰

一般在秒杀活动或团购活动中,因为突然流量暴增,导致系统负载过大,这时使用消息队列对应用前端进行流量控制,从入口限制进入活动的用户范围,即用户入队列。这样可以减缓后端压力。

利用消息队列进行流量削峰

3.消息分发

这是大多数消息系统的核心功能,作为消息管道,实现消息通信,比如点对点消息队列,作为消息生产者和消息消费者之间通信的纽带。

消息分发

4.异步处理

将不是必须和立即响应的业务逻辑,通过MQ进行异步处理,以提高整个系统的性能和响应速度。
案例:比如典型的用户系统中,用户注册,可能需要邮箱或短信进行验证。

  • 传统处理方式:等待调用邮箱接口或者调用邮箱类,成功调用后,再给用户响应。然而假如邮箱接口,因为网络或服务负载总是导致系统延迟或服务不可用,那用户注册功能可能无法继续下去。

传统注册流程

  • 使用MQ:将邮箱验证或短信验证当成一个任务,存入消息队列,让注册主流程继续进行,验证异步进行,无论邮箱难功能是否可用,注册流程依然可以继续进行。

异步处理注册服务流程

三.RocketMQ拥有的特性

  • 消息模式:拉模式(ActiveMQ使用推模式)
  • 支持协议:TCP/JMS/OpenMessaging
  • 顺序消息:确保严格的消息排序,并可以优雅地扩展
  • 定时消息:支持定时消息
  • 批量消息:支持批量消息
  • 广播消息:支持广播消息
  • 消息过滤:支持基于SQL92标准的属性过滤表达式
  • 服务器触发重发:支持消息服务器触发重新传递
  • 消息存储:支持高性能、低延迟的消息文件存储
  • 消息追溯:支持时间戳和偏移量两种方式对消息进行追溯
  • 高可用和故障转移:系统支持主从模式(不需要其他插件)
  • 消息追踪
  • 配置复杂度:开箱即用,只需要配置几个参数即可
  • 管理和操作工具支持:支持web和终端命令两种方式管理

四.RocketMQ的核心概念

1.RocketMQ中间件服务
(1).Name Server

Name Server在RocketMQ中充当消息路由提供者的角色,通过主题来为生产者和消费者提供对应的消息队列列表。

(2).Broker

Broker即为消息队列本身。它负责存储消息、接收生产者产生的消息,为消费者转发消息。同时它还会存储与消息相关的元数据,包括消费者组,消费进度偏移和主题/队列信息。

2.消息队列中的角色
  • producer:消息生产者
  • consumer:消息消费者
3.消息的分类
  • topic : 消息主题,即为消息生产者与消息消费者消息传递的类别
  • tag : 消息标签,也称为消息子主题。对于来自同一业务模块的具有不同目的的消息可以具有相同的主题和不同的标签。