1.RocketMQ是一款分布式、队列模型的消息中间件,是阿里巴巴集团自主研发的专业消息中间件,借鉴参考了JMS规范的MQ实现,更参考了优秀的开源消息中间件KAFKA,实现了业务消峰、分布式事务的优秀框架。
2.其底层代码编写清晰优秀,采用Netty NIO框架进行数据通信
3.摒弃了Zookeeper,内部使用更轻量级的NameServer进行网络路由,提高服务性能,并且支持消息失败重试机制。
4.天然支持集群模型,消费者负载均衡、水平扩展能力,支持广播模式和集群模式。
5.采用零拷贝的原理、顺序写盘、支持亿级消息堆积能力。
6.提供丰富的消息机制,如顺序消息、事务消息等
Message:消息,消息队列中信息传递的载体。
Message ID:消息的全局唯一标识,由 MQ 系统自动生成,唯一标识某条消息。
Message Key:消息的业务标识,由消息生产者(Producer)设置,唯一标识某个业务逻辑。
Topic:消息主题,一级消息类型,通过 Topic 对消息进行分类。
Tag:消息标签,二级消息类型,用来进一步区分某个 Topic 下的消息分类。
Producer:消息生产者,也称为消息发布者,负责生产并发送消息。
Producer ID:一类 Producer 的标识,这类 Producer 通常生产并发送一类消息,且发送逻辑一致。
Consumer:消息消费者,也称为消息订阅者,负责接收并消费消息。
Consumer ID:一类 Consumer 的标识,这类 Consumer 通常接收并消费一类消息,且消费逻辑一致。
nameserver: 可以理解为是消息队列的协调者,Broker向它注册路由信息,同时Client向其获取路由信息,如果使用过Zookeeper,就比较容易理解了,但是功能比Zookeeper弱;
NameServer本身是没有状态的,并且多个NameServer直接并没有通信,可以横向扩展多台,Broker会和每一台NameServer建立长连接;
Broker: Broker是RocketMQ的核心,提供了消息的接收,存储,拉取等功能,一般都需要保证Broker的高可用,所以会配置Broker Slave,当Master挂掉之后,Consumer然后可以消费Slave;
Broker分为Master和Slave,一个Master可以对应多个Slave,Master与Slave的对应关系通过指定相同的BrokerName,不同的BrokerId来定义,BrokerId为0表示Master,非0表示Slave;
Producer: 消息队列的生产者,需要与NameServer建立连接,从NameServer获取Topic路由信息,并向提供Topic服务的Broker Master建立连接;Producer无状态,看集群部署;
Consumer: 消息队列的消费者,同样与NameServer建立连接,从NameServer获取Topic路由信息,并向提供Topic服务的Broker Master,Slave建立连接;
mqadmin是RocketMQ自带的命令行管理工具,可以创建、修改Topic,查询消息,更新配置信息等操作
首先进入RocketMQ工程,进入/RocketMQ/bin
在该目录下有个mqadmin脚本
在mqadmin下可以查看有哪些命令
sh mqadmin
sh mqadmin help 命令名称
例如,查看updateTopic的使用
sh mqadmin help updateTopic
以创建topic为例
指令 updateTopic
参数
-b 如果 -c为空,则必填 broker地址,表示topic建在该broker
-c 如果 -b为空,则必填 cluster名称,表示topic建在该集群(集群可通过clusterList查询)
-h 选填 打印帮助
-n 必填 nameserve服务地址列表,格式ip:port;ip:port;…
-p 选填 指定新topic的权限限制( W|R|WR )
-r 选填 可读队列数(默认为8)
-w 选填 可写队列数(默认为8)
-t 必填 topic名称
举例
在集群DefaultCluster上创建主题ZTEExample,nameserve地址为10.45.47.168:9876
sh mqadmin updateTopic –n 10.45.47.168 –c DefaultCluster –t ZTEExample