RocketMQ基本信息

正文

简介

RocketMQ是一个纯Java、分布式、队列模型的开源消息中间件,前身是MetaQ,是阿里参考Kafka特点研发的一个队列模型的消息中间件,后开源给apache基金会成为了apache的顶级开源项目,具有高性能、高可靠、高实时、分布式特点。

功能

发布/订阅消息传递模型
财务级交易消息
各种跨语言客户端,例如Java,C / C ++,Python,Go
可插拔的传输协议,例如TCP,SSL,AIO
内置的消息跟踪功能,还支持开放式跟踪
多功能的大数据和流生态系统集成
按时间或偏移量追溯消息
可靠的FIFO和严格的有序消息传递在同一队列中
高效的推拉消费模型
单个队列中的百万级消息累积容量
多种消息传递协议,例如JMS和OpenMessaging
灵活的分布式横向扩展部署架构
快如闪电的批量消息交换系统
各种消息过滤器机制,例如SQL和Tag
用于隔离测试和云隔离群集的Docker映像
功能丰富的管理仪表板,用于配置,指标和监视
认证与授权

优缺点

  • 单机吞吐量:十万级

  • 可用性:非常高,分布式架构

  • 消息可靠性:经过参数优化配置,消息可以做到0丢失

  • 功能支持:MQ功能较为完善,还是分布式的,扩展性好

  • 支持10亿级别的消息堆积,不会因为堆积导致性能下降

  • 源码是java,我们可以自己阅读源码

RocketMQ缺点:

  • 支持的客户端语言不多,目前是java及c++,其中c++不成熟

  • 社区活跃度不是特别活跃

项目结构

核心模块:

rocketmq-broker:接受生产者发来的消息并存储(通过调用rocketmq-store),消费者从这里取得消息
rocketmq-client:提供发送、接受消息的客户端API。
rocketmq-namesrv:NameServer,类似于Zookeeper,这里保存着消息的TopicName,队列等运行时的元信息。(注册中心)
rocketmq-common:通用的一些类,方法,数据结构等。
rocketmq-remoting:基于Netty4的client/server + fastjson序列化 + 自定义二进制协议。
rocketmq-store:消息、索引存储等。
rocketmq-filtersrv:消息过滤器Server,需要注意的是,要实现这种过滤,需要上传代码到MQ!(一般而言,我们利用Tag足以满足大部分的过滤需求,如果更灵活更复杂的过滤需求,可以考虑filtersrv组件)。
rocketmq-tools:命令行工具。

各组件介绍


nameServer(注册中心)

nameServer 是一个功能齐全的服务器,其角色类似Dubbo中的Zookeeper,但NameServer与Zookeeper相比更轻量。主要是因为每个NameServer节点互相之间是独立的,没有任何信息交互。该服务器会记录broker中的topic信息 。product 和consumer 回定时向nameserver 获取topic信息

product

product产生topic发送到broker

broker

Broker是具体提供业务的服务器,单个Broker节点与所有的NameServer节点保持长连接及心跳,并会定时将Topic信息注册到NameServer,顺带一提底层的通信和连接都是基于Netty实现的。
Broker负责消息存储,以Topic为纬度支持轻量级的队列,单机可以支撑上万队列规模,支持消息推拉模型(主动拉取和被动接受)。
 

consumer

对product产生的消息进行消费,有两种消费模式,push和pull两种消费模式 支持集群消费和广播消费。

集群消费:由product生产的消息只有被单一实例消费

广播消费:订阅了该topic的consumer 都可以进行消费

PUSH消费模式:基于发布订阅模式的回调接口,可以由开发者自己定义

PULL消费模式:主动向nameserver获取topic信息并进行消费

message

消息消费模式

消息消费的几种队列

重试队列

消费端,一直不回传 消费的结果。rocketmq认为消息没收到,consumer下一次拉取,broker依然会发送该消息。

所以,任何异常都要捕获返回ConsumeConcurrentlyStatus.RECONSUME_LATER

rocketmq会放到重试队列。

这个重试TOPIC的名字是

%RETRY%+consumergroup的名字

死信队列

重试的消息在延迟的某个时间点(默认是10秒,业务可设置)后,再次投递到这个ConsumerGroup。而如果一直这样重复消费都持续失败到一定次数(默认16次,但是使用DefaultMQPullConsumer才可以修改。),就会投递到DLQ死信队列,此时需要人工干预了。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值