java 创建topic,RocketMQ在Java代码之中手动创建Topic

Rocketmq在Java代码之中手动创建Topic

【原创,转载请注明出处】

我的 【博客园主页】 【CSDN主页】 【简书主页】

加V进Java交流群,备注Java交流:w1129574379

** 本文仅限RocketMQ 4.5.*版本,其他版本可能有区别,仅供参考 **

本文仅限单 name server 的情况,nameserver集群的情况下不确定能否正常工作(原理都是一样的)

参考信息源及相关类/方法

org.apache.rocketmq.tools.command.topic.UpdateTopicSubCommand#execute

org.apache.rocketmq.client.ClientConfig

额外的依赖

需要添加额外的maven依赖,版本自选

org.apache.rocketmq

rocketmq-tools

4.5.1

org.apache.rocketmq

rocketmq-spring-boot-starter

2.0.3

使用

在命令行中创建Topic时应使用updateTopic命令,其使用示例如下:

./mqadmin updateTopic -n localhost:9876 -b localhost:10911 -t tx-mq-TOPIC

各参数含义如下:

mqadmin updateTopic [-b ] [-c ] [-h] [-n ] [-o ] [-p ] [-r ] [-s ]

-t [-u ] [-w ]

-b,--brokerAddr create topic to which broker

-c,--clusterName create topic to which cluster

-h,--help Print help

-n,--namesrvAddr Name server address list, eg: 192.168.0.1:9876;192.168.0.2:9876

-o,--order set topic's order(true|false)

-p,--perm set topic's permission(2|4|6), intro[2:W 4:R; 6:RW]

-r,--readQueueNums set read queue nums

-s,--hasUnitSub has unit sub (true|false)

-t,--topic topic name

-u,--unit is unit topic (true|false)

-w,--writeQueueNums set write queue nums

注意事项及存在的问题:

RocketMQ规定,在使用updateTopic命令创建topic时,-b或-c选项必须指定其中一个(都指定则处理-b参数,忽略-c参数),与此同时,-t参数也为必要参数,缺少这几个必要参数则topic创建失败!!!

使用Java代码手动创建topic的形式中,使用-b选项创建topic可以正常使用,此时RocketMQ直接使用指定的broker地址来找到broker并在对应broker上创建topic。

使用Java代码手动创建topic的形式中,直接使用-c选项创建topic无法创建成功,因为org.apache.rocketmq.tools.command.topic.UpdateTopicSubCommand#execute方法需要一个DefaultMQAdminExt对象来连接到对应nameserver上以便获取对应集群下的所有broker信息,

DefaultMQAdminExt对象针对nameserver的处理代码为:private String namesrvAddr = NameServerAddressUtils.getNameServerAddresses(),查看代码发现其实际实现为System.getProperty(MixAll.NAMESRV_ADDR_PROPERTY, System.getenv(MixAll.NAMESRV_ADDR_ENV))。此时问题出现了,这里的实现代码并不能get到namesrv地址的参数值,导致连接到namesrv失败,完整报错信息如下:

点击查看完整报错信息

org.apache.rocketmq.tools.command.SubCommandException: UpdateTopicSubCommand command failed

at org.apache.rocketmq.tools.command.topic.UpdateTopicSubCommand.execute(UpdateTopicSubCommand.java:185)

at com.bayss.bws.common.utils.RocketMQUtil.crea

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值