第2章 生产环境下的配置和使用

本章的目的是带领读者快速将RocketMQ 应用到生产环境中,因此不会探究原理和细节。本章会先介绍RocketMQ 的各个角色,然后介绍如何搭建一个高可用的分布式消息队列集群, 以及 RocketMQ 的 Consumer 和 Producer 的使用方法与常用命令。

2.1 RocketMQ 各部分角色介绍

RocketMQ 由四部分组成,先来直观地了解一下这些角色以及各自的功能。分布式消息队列是用来高效地传输消息的,它的功能和现实生活中的邮局收发信件很类似,我们类比地说一下相应的模块。现实生活中的邮政系统要正常运行,离不开下面这四个角色, 一是发信者, 二是收信者, 三是负责暂存、传输的邮局, 四是负责协调各个地方邮局的管理机构。 对应到 RocketMQ 中,这四个角色就是Producer 、Consumer 、Broker 和NameServer。
启动RocketMQ 的顺序是先启动NameServer ,再启动Broker ,这时候消息队列已经可以提供服务了,想发送消息就使用Producer 来发送,想接收消息就使用Consumer 来接收。很多应用程序既要发送,又要接收,可以启动多个Producer 和Consumer 来发送多种消息,同时接收多种消息。
为了消除单点故障,增加可靠性或增大吞吐量,可以在多台机器上部署多个NameServer 和Broker ,为每个Broker 部署一个或多个Slave 。

图2 -1 RocketMQ 各个角色间关系

了解了四种角色以后, 再介绍一下Topic 和Message Queue 这两个名词。一个分布式消息队列中间件部署好以后,可以给很多个业务提供服务,同一个业务也有不同类型的消息要投递, 这些不同类型的消息以不同的Topic 名称来区分。所以发送和接收消息前,先创建Topic , 针对某个Topic 发送和接收消息。有了Topic 以后,还需要解决性能问题。如果一个Topic 要发送和接收的数据量非常大, 需要能支持增加并行处理的机器来提高处理速度,这时候一个Topic 可以根据需求设置一个或多个Message Queue, Message Queue 类似分区或Partition(对比kafka) 。Topic 有了多个Message Queue 后,消息可以并行地向各个Message Queue 发送,消费者也可以并行地从多个Message Queue 读取消息并消费。

2.2 多机集群配置和部署

书中示例搭建一个双主双从的RocketMQ集群,怎么搭建可以参考我之前写的博客

2.3 发送/接收消息示例

书中介绍了一些示例代码,由于我暂时不懂java代码。所以在这里,我会使用前面快速开始中使用的生产者和消费者的示例来收发消息。
消息的发送,单纯只用示例的生产者的话会发送一堆,要发送自己想要的消息,我这里使用 rocket-console。rocket-console 的安装可以参考我的博客

2.4 常用管理命令

MQAdmin 是RocketMQ 自带的命令行管理工具,在bin 目录下,运行mqadmin 即可执行。使用mqadmin 命令,可以进行创建、修改Topic ,更新Broker 的配置信息,查询特定消息等各种操作。本节将介绍几个常用的命令。

  1. 创建/修改Topic
    消息的发送和接收都要有对应的Topic , 需要向某个Topic 发送或接收消息,所以在正式使用RocketMQ 进行消息发送和接收前,要先创建Topic ,创建Topic 的指令是updateTopic ,表2-1 列出了支持的参数。
参数 是否必填 说明
-b 如果-c 为空,则必填 Broker 地址, Topic 所在的Broker( 192.168.0.1: 10911)
-c 如果-b 为空,则必填 Cluster名称,表示Topic 创建在该集群(集群可通过cluster List查询),如果集群中有多个master 角色的Broker , 默认在每个Broker上创建8 个读写队列
-h 打印帮助
-n NameServe 服务地址列表,举例: 192.168.0.1:9876;192.168.0. 2:9876
-p 指定新Topic 的权限限制,(2 [ 4 [6), [2:W 4:R; 6:RW]
-r 可读队列数(默认为8 )
-w 可写队列数(默认为8 )
-t Topic 名称
  1. 删除Topic
    与创建/修改Top ic 对应的是删除Topic ,把RocketMQ 系统中不用的Topic 彻底清除,指令是deleteTopic , 表2-2 列出了支持的参数。
参数 是否必填 说明
-c 如果-b 为空,则必填 Cluster名称,表示Topic 创建在该集群(集群可通过cluster List查询),如果集群中有多个master 角色的Broker , 默认在每个Broker上创建8 个读写队列
-h 打印帮助
-n NameServe 服务地址列表,举例: 192.168.0.1:9876;192.168.0. 2:9876
-t Topic 名称
  1. 创建/修改订阅组
    订阅组在提高系统的高可用性和吞吐量方面扮演着重要的角色,比如用Clustering 模式消费一个Topic 里的消息内容时,可以启动多个消费者并行消费,每个消费者只消费Topic 里消息的一部分,以此提高消费速度,这个时候就是通过订阅组来指明哪些消费者是同一组,同一组的消费者共同消费同一个Topic 里的内容。订阅组可以被自动创建,使用这个命令一般是用来修改订阅组,指令是updatesubGroup ,表2-3 列出了支持的参数。
参数 是否必填 说明
-b 如果-c 为空,则必填 Broker 地址,创建订阅组所在的Broker
-c 如果-b 为空,则必填 Cluster 名称,创建订阅组所在的Cluster
-d 是否容许广播方式消费
-g 订阅组名
-i 从哪个Broker 开始消费
-m 是否容许从队列的最小位置开始消费(true l false),默认会设置为true
-q 消费失败的消息放到一个重试队列,每个订阅组配置的重试队列数量
-r 重试消费最大次数,超过则投递到死信队列
-s 消费功能是否开启
-w 发现消息堆积后,将Con s umer 的消费请求重定向到另外一台Broker 机器
-h 打印帮助
-n NameServe 服务地址列表,举例:192.168.0.1:9876;192.168.0.2:9876
  1. 删除订阅组
    与创建或修改订阅组相对应,这个命令删除不再使用的订阅组,指令是deleteSubGroup ,表2-4 列出了支持的参数。
参数 是否必填 说明
-b 如果-c 为空,则必填 Broker 地址,创建订阅组所在的Broker
-c 如果-b 为空,则必填 Cluster 名称,创建订阅组所在的Cluster
-g 订阅组名
-h 打印帮助
-n NameServe 服务地址列表,举例:192.168.0.1:9876;192.168.0.2:9876
  1. 更新Broker 配置
    Broker 有很多的配置信息,在Broker 启动时,可以通过配置文件来指定配置信息。有些配置信息支持在Broker 运行的时候动态更改,更改指令是updateBrokerConfig , 表2-5 列出了支持的参数。
参数 是否必填 说明
-b 如果-c 为空,则必填 Broker 地址,创建订阅组所在的Broker
-c 如果-b 为空,则必填 Cluster 名称,创建订阅组所在的Cluster
-k Key值
-v Value值
-h 打印帮助
-n NameServe 服务地址列表,举例:192.168.0.1:9876;192.168.0.2:9876
  1. 更新Topic 的读写权限
    RocketMQ 支持对Topic 进行权限控制, 主要分为只读的Topic 和可读写的Topic ,权限可以通过指令updateTopicPerm 来动态改变,表2-6 列出了支持的参数。
参数 是否必填 说明
-b 如果-c 为空,则必填 Broker 地址,创建订阅组所在的Broker
-c 如果-b 为空,则必填 Cluster 名称,创建订阅组所在的Cluster
-h 打印帮助
-n NameServe 服务地址列表,举例:192.168.0.1:9876;192.168.0.2:9876
-p 指定新Topic 的权限限制,(2|4|6 ),[2:W 4:R; 6:RW]
-t Topic 名称
  1. 查询Topic 的路由信息
    Topic 的路由信息指的是某个Topic 所在的Broker 相关信息,客户端可以通过NameServer 来获取这些信息,本命令一般在调试的时候使用,指令是TopicRoute ,表2-7 列出了支持的参数。
参数 是否必填 说明
-h 打印帮助
-n NameServe 服务地址列表,举例:192.168.0.1:9876;192.168.0.2:9876
-t Topic名称
  1. 查看Topic 列表信息
    上面提到的TopicRoute 是列出某个Topic 的相关信息,还有个指令TopicList用来列出集群中所有Topic 的名称,表2-8 列出了支持的参数。
参数 是否必填 说明
-h 打印帮助
-n NameServe 服务地址列表,举例:192.168.0.1:9876;192.168.0.2:9876
-t Topic名称
  1. 根据时间查询消息
    一条消息被发送到RocketMQ 后, 默认会带上发送的时间戳, 所以我们可以根据估计的时间来查询消息,指令是printMsg ,表2-10 列出了支持的参数。
参数 是否必填 说明
-b 开始时间戳
-d 结束时间戳
-h 打印帮助
-t Topic名称
-s Tag 名称举例:TagA II TagB
-n NameServe 服务地址列表,举例:192.168.0.1:9876;192.168.0.2:9876
  1. 根据消息ID 查询消息
    根据消息ID 可以精确定位到某条消息,但是消息ID 需要通过其他方式来获取, 比如可以先用时间来查询出一些消息,然后定位到要找的具体某个消息,指令是queryMsgByld ,表2-11列出了支持的参数。
参数 是否必填 说明
-i 消息ID
-h 打印帮助
-n NameServe 服务地址列表,举例:192.168.0.1:9876;192.168.0.2:9876
  1. 查看集群消息
    指令cluster List 用来列出集群的状态,看看有哪些Broker 在提供服务,表2-12 列出了支持的参数。
参数 是否必填 说明
-m 是有打印更多信息
-h 打印帮助
-n NameServe 服务地址列表,举例:192.168.0.1:9876;192.168.0.2:9876

2.5 通过图形界面管理集群

对于RocketMQ 新手,可以启动运维服务,从页面上直观看到消息队列集群的状态。有一定经验以后,可以使用命令行更快捷,其功能更全面。这里请看我前面提到的rocketmq-console,博客

2.6 本章小结

在生产环境中使用RocketMQ 集群需要比QuickStart 部分了解更多的内容,本章在机器角色、集群配置和部署,以及集群管理方面都做了介绍,用户可以基于这些内容搭建起一个生产环境的RocketMQ 消息队列集群,在数据量不大的非关键场景,可以通过这一章快速上线。下一章重点讲如何用好RocketMQ,即根据实际场景选择合适的发送消息和接收消息的方式。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,236评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,867评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,715评论 0 340
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,899评论 1 278
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,895评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,733评论 1 283
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,085评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,722评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,025评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,696评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,816评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,447评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,057评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,009评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,254评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,204评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,561评论 2 343

推荐阅读更多精彩内容