hj_rocketmq
官方文档 -> rocketmq github -> rocketmq
消息队列是高并发系统的核心组件之一,能为系统解构提升开发效率,增加系统稳定性,主要有以下优势:
- 削峰填谷 -> 解决瞬时写压力大于应用服务能力导致消息丢失,系统崩溃等问题;
- 系统解耦 -> 解决不同重要程度,不同能力级别系统之间因为依赖而因一个而全部宕机问题;
- 提升性能 -> 一对多的调用,可以一条消息给消息系统,其他相关系统分别处理;
- 蓄流测压 -> 线上有些链路不好压测,可通过堆积一定量消息再开放来压测
目前主流MQ -> Rocketmq , kafka , Rabbitmq , Activemq
rocketmq 主要优势: 经过双十一的高并发考验, 支持结合rocketmq的多系统之间数据最终一致性, 支持18个级别的延迟消息,
支持指定次数和时间间隔的失败消息重发, 支持 consumer 端 tag 过滤, 支持重复消费.
架构图:
- Name Server : 充当路由消息的提供者,一个几乎无状态的节点,可集群部署,节点之间无任何信息同步;
- Broker : 消息中转角色,负责存储转发消息,部署相对复杂,分为 Master 与 Slave ,通过指定相同的BrokerName,不同的BrokerId
来指定建立对应关系,BorkerId为0表示Master,非0表示Slave,都可以部署多个,每个 broker 与 Name Server 节点存在长连接,
定时(30s)注册Topic到Name Server 中,Name Server 定时(10s)扫描所有存活的broker连接,若2分钟没收到心跳,则断开连接; - Producer : 与Name Server 集群中的一个节点(随机)建立长连接,定期(30s)拉取Topic路由信息,并向提供Topic服务的Master Broker建立
长连接,且定时(30s)发送心跳,Producer完全无状态,可集群部署 - Consumer : 与Name Server 集群中的一个节点(随机)建立长连接,定期(30s)拉取Topic路由信息,并向提供Topic服务的Master Broker
Slave Broker 建立长连接,且定时(30s)发送心跳,既可从Master也可从Slave订阅消息,订阅规则由Broker配置决定.
Broker 中的一些重要名词概述: topic -> 消息的第一级类型,如交易消息; queue -> topic下的子主题; tags -> 是topic下的次级/二级消息类型,如交易创建消息;
offset -> 存储消息时为每个topic下的queue生成的一个消息的索引文件,每个queue都对应一个Offset记录当前queue中的消息条数.
消息的种类
- 按照发送的特点分: 同步消息 异步消息 单向消息
- 按照使用功能特点分: 普通消息 顺序消息 广播消息 延时消息 批量消息 事务消息
参考博客: