前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >RocketMQ架构及特性

RocketMQ架构及特性

原创
作者头像
code-x
修改2022-08-17 14:59:44
1830
修改2022-08-17 14:59:44
举报
文章被收录于专栏:code-xcode-x

架构

  1. RocketMQ包含四个组件NameServer, Broker, Consumer, Producer
  2. NameServer类似注册中心, Broker接收存储消息, Consumer和Producer在项目内定义
  3. Broker向所有NameServer注册自己, 持续发送心跳包
  4. Consumer和Producer向NameServer保持长连接, 每隔30s向NameServer获取所有Topic的队列情况
  5. Consumer和Producer向NameServer获取Broker的地址, 进行消息收发, 也会与所有关联的Broker保持长连接
  6. 一个Broker内有多个Queue, 一个Queue内会存在多个Topic的消息, 一个Topic也会映射到多个Broker
  7. Queue内存储的并非消息内容, 而是指向CommitLog的索引
  8. 消息在每个Broker内以Queue的形式存储

特性

基于rocketmq-spring-boot-starter

  1. 发送普通消息, 延时消息和顺序消息, 事务消息
  2. 事务消息, Producer先把消息发送到Broker, 此时的消息状态为半消息, 之后Producer再对消息进行二次确认(Commit或Rollback), Consumer才能消费该条消息, Broker会定时扫描长时间没有进行二次确认的消息, 主动向Producer进行消息回查
  3. 普通和延时可以并行消费, 顺序消息按照先入先出的顺序进行消费
  4. 发送失败重试, 失败后重试指定次数
  5. 消费重试按异常类型可以分为异常重试和超时重试
  6. 超时重试: Consumer处理时间过长, 在超时时间内没有返回给Broker消费状态, 那么Broker也会自动重试(通过System.exit(-1)重现类似场景, Thread.sleep()无法复现)
  7. 异常重试, 根据消费者返回的状态判断消费是否成功, 按消息类型可以分为两种重试机制
    • 顺序消息: 失败后默认1秒重试一次, 直到成功; 顺序消息与普通消息可能存放在一个Queue中, 由于顺序消息的消费特性, 当顺序消息被消费时, 会锁住当前Queue, 若该消息消费失败, 则同一Queue内后续的消息会阻塞到该消息消费成功为止, 对应状态枚举为ConsumeOrderlyStatus
    • 普通消息: 失败后有限次数的重试, 重试过程不阻塞Queue, 间隔时间依次递增, 对应状态枚举为ConsumeConcurrentlyStatus
  8. 顺序消息 消息会被发送到同一个broker中, 消费者进行消费时, 会锁住当前队列, 以保证消费顺序

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 架构
  • 特性
相关产品与服务
消息队列 CMQ 版
消息队列 CMQ 版(TDMQ for CMQ,简称 TDMQ CMQ 版)是一款分布式高可用的消息队列服务,它能够提供可靠的,基于消息的异步通信机制,能够将分布式部署的不同应用(或同一应用的不同组件)中的信息传递,存储在可靠有效的 CMQ 队列中,防止消息丢失。TDMQ CMQ 版支持多进程同时读写,收发互不干扰,无需各应用或组件始终处于运行状态。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档