RocketMQ篇.Topic配置中perm的含义

本文详细介绍了Topic的读写模式设置方法,包括6(读写)、4(禁写)、2(禁读)三种模式,一般推荐设置为6,以便同时支持读写操作。

作用: 设置该 Topic 的读写模式。

取值说明如下:

6:同时支持读写
4:禁写
2:禁读

一般情况设置为: 6

引用:[原文](https://blog.youkuaiyun.com/lwf006164/article/details/91565117)

### 修改 RocketMQTopic 配置的方法 在 RocketMQ 中,Topic 是消息传递的核心组件之一。如果需要更换或修改 Topic配置,可以通过以下几种方式实现。 #### 1. 动态调整 Queue 数量 当创建一个新的 Topic 或者更新现有的 Topic 时,可以动态设置其队列数量 `queueNums`。具体逻辑如下: - 如果未显式指定 `queueNums` 值,则会采用 `DefaultMQProducer.defaultTopicQueueNums` 和 Broker 默认值(通常是 TBW102)中较小的一个[^1]。 ```java int queueNums = Math.min(defaultMQProducer.getDefaultTopicQueueNums(), brokerConfig.getBrokerPermission()); ``` 因此,在实际应用中,可以通过重新定义 Producer 的默认队列数来间接影响新 Topic 的队列分配。 #### 2. 使用 AdminTool 更新 Topic 路由信息 RocketMQ 提供了一个命令行工具 `mqadmin` 来管理集群资源,其中包括更新 Topic 的路由信息。以下是操作方法: ```bash sh mqadmin updateTopic \ -n nameserver-address \ -t topicName \ -c clusterName \ --perm 6 \ --readQueueNums 8 \ --writeQueueNums 4 ``` 此命令允许管理员自定义读写队列的数量以及权限位等参数。需要注意的是,该变更仅适用于尚未被使用的 Topic;对于已有数据的 Topic,建议谨慎处理以免引发一致性问题。 #### 3. 编程接口手动刷新 Topic Route 表 通过编程的方式也可以达到相同效果——调用内部 API 刷新本地缓存中的 TopicRouteData 对象实例。例如下面这段伪代码展示了如何检测并同步最新的 Topic 定义: ```java if (topicRouteData != null) { TopicRouteData old = producer.getTopicRouteTable().get(topic); boolean changed = isTopicRouteDataChanged(old, topicRouteData); if (!changed) { // No change detected. } else { logger.info("Detected changes in the topic[{}] route info.", topic); producer.updateTopicRouteInfoFromNameServer(); } } ``` 以上片段来源于 RocketMQ 源码解析文档的一部分说明[^1],它描述了框架内部是如何判断当前存储版本与最新获取到的信息之间是否存在差异的过程。 #### 注意事项 尽管技术上支持多种途径去更改 Topic 属性,但在生产环境中执行此类动作前务必做好充分准备: - **备份现有结构**: 记录下所有涉及改动的目标对象初始状态以便回滚; - **评估潜在风险**: 特别关注那些正在运行的应用程序是否会因为这些变化受到影响; - **协调上下游依赖方**: 确保整个链路上的相关模块都知晓即将发生的变动及其可能带来的后果。 --- ###
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值