RocketMQ
第一章 RocketMQ基础知识
第二章 搭建RocketMQ (单机)
第三章 搭建RocketMQ (集群)
文章目录
一、RocketMQ是什么?
RocketMQ 是一款开源的分布式消息系统,基于高可用分布式集群技术,提供低延时的、高可靠的消息发布与订阅服务。同时,广泛应用于多个领域,包括异步通信解耦、企业解决方案、金融支付、电信、电子商务、快递物流、广告营销、社交、即时通信、移动应用、手游、视频、物联网、车联网等。
二、几个概念
1.Producer
消息生产者,生产者的作用就是将消息发送到 MQ,生产者本身既可以产生消息,如读取文本信息等。也可以对外提供接口,由外部应用来调用接口,再由生产者将收到的消息发送到 MQ。
2.Producer Group
消息生产者组,简单来说就是多个发送同一类消息的生产者称之为一个生产者组。在这里可以不用关心,只要知道有这么一个概念即可,Producer实例可以是多机器、单机器多进程、单进程中的多对象。Producer可以发送多个Topic。处理分布式事务时,也需要Producer集群提高可靠性。
3.Consumer
消息消费者,简单来说,消费 MQ 上的消息的应用程序就是消费者,至于消息是否进行逻辑处理,还是直接存储到数据库等取决于业务需要。
4.Consumer Group
消息消费者组,和生产者类似,消费同一类消息的多个 consumer 实例组成一个消费者组.Consumer实例 的集合。Consumer 实例可以是多机器、但机器多进程、单进程中的多对象。同一个Group中的实例,在集群模式下,以均摊的方式消费;在广播模式下,每个实例都全部消费。
5.Topic
Topic 是一种消息的逻辑分类,比如说你有订单类的消息,也有库存类的消息,那么就需要进行分类,一个是订单 Topic 存放订单相关的消息,一个是库存 Topic 存储库存相关的消息
6.Broker Server
Broker 是 RocketMQ 系统的主要角色,其实就是前面一直说的 MQ。Broker 接收来自生产者的消息,储存以及为消费者拉取消息的请求做好准备。
7.Name Server
Name Server 为 producer 和 consumer 提供路由信息。
8.Tag
标签可以被认为是对 Topic 进一步细化。一般在相同业务模块中通过引入标签来标记不同用途的消息。
9.Message
Message 是消息的载体。一个 Message 必须指定 topic,相当于寄信的地址。Message 还有一个可选的 tag 设置,以便消费端可以基于 tag 进行过滤消息。也可以添加额外的键值对,例如你需要一个业务 key 来查找 broker 上的消息,方便在开发过程中诊断问题。
三、交互逻辑
客户端,包括生产者、消费者。 无论是生产者还是消费者,在启动时都需要指定一个或多个namesrv地址。客户端启动后,会以30秒一次的频率执行心跳注册以及路由更新动作。
心跳注册:向所有master broker发送心跳信息(broker的信息来源在下面的路由更新中会介绍),包括消费订阅信息、生产者信息,broker在收到心跳信息后,会将信息提取并保存到内存中
路由更新:从namesrv列表中随机选取一个,与之建立连接(并将连接保持,后续以此连接为准,直到连接不可用,才会换成另一个namesrv进行连接)。从建立连接的namesrv上拉取所有topic的路由信息,主要包括broker的addr,topic对应的queue信息(也就是在前面一篇"nameserver与broker的交互"中提到的路由信息),会根据返回的queueData中的写队列数(writeNums)创建对应数量的queue,每个queue对应一个queueId,与broker端的queue对应。
四、常用命令行
cd /rocketmq-4.9.3/bin
1.查看消费者组情况
sh mqadmin consumerProgress -n localhost:9876
sh mqadmin consumerProgress -g comsumerName -n localhost:9876
3.查看topic情况
sh mqadmin topicStatus -t topic_test -n localhost:9876
sh mqadmin topiclist -n localhost:9876
4. 查看topic详细情况,包括消费组
sh mqadmin statsAll -t topic_test -n localhost:9876
sh mqadmin statsAll -a -n localhost:9876
5.删除topic
sh mqadmin deleteTopic -c DefaultCluster -t topic_test_new -n localhost:9876