【RocketMQ系列】-开发人员自主createTopic

开始之前,猿Why先抛出一系列问题:

  1. RocketMQ的Topic创建有几种方式?
  2. RocketMQ服务没有指定的Topic情况下(某种业务场景),是由业务流程发起者来创建Topic还是RocketMQ运维人员创建合适?
  3. Producer和Consumer在执行start方法之后,是否会创建Topic到Broker?
    如果有路过的大佬,希望不利赐教!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

然后我来描述一下我遇到的问题:producer和consumer,start后,尚未进行消息的生产和消费,进行Topic状态检查,没有返回Topic的存在。基于这样的场景(先不管是RocketMQ就是这种机制,还是服务配置不对,毕竟是线上无法去考究),我想在业务代码中做一个兜底操作:当Topic不存在的时候,自主createTopic。

还是那句老话儿,自己在开发中遇到的问题,前辈们一定也遇到过!
为了达到自己的目的,那么?上代码:
加依赖(请根据自己的RocketMQ服务选择版本):

        <dependency>
            <groupId>org.apache.rocketmq</groupId>
            <artifactId>rocketmq-tools</artifactId>
            <version>4.3.0</version>
        </dependency>
@RunWith(SpringRunner.class)
@SpringBootTest
public class RocketMQToolsTest {
    private static Logger logger = LogManager.getLogger(RocketMQToolsTest.class);

    @Test
    public void createTopicTest() {
        DefaultMQAdminExt defaultMQAdminExt = new DefaultMQAdminExt();
        defaultMQAdminExt.setAdminExtGroup(Const.GROUP);
        defaultMQAdminExt.setNamesrvAddr(Const.NAME_SRV);
        try {
            defaultMQAdminExt.start();
            String newTopic = defaultMQAdminExt.getAdminExtGroup();
            String brokerName = "rocketmq";
            defaultMQAdminExt.createTopic(brokerName, newTopic, 1);
            // 稍等片刻
            Thread.sleep(3000);
            TopicStatsTable topicStatsTable = defaultMQAdminExt.examineTopicStats(newTopic);
            Assert.isTrue(!ObjectUtils.isEmpty(topicStatsTable), "Topic不存在");
            logger.info(JSON.toJSON(topicStatsTable));
        } catch (MQClientException e) {
            logger.error(e.getErrorMessage());
        } catch (InterruptedException e) {
        	Thread.currentThread().interrupted();
            logger.error(e.getMessage());
        } catch (RemotingException e) {
            logger.error(e.getMessage());
        } catch (MQBrokerException e) {
            logger.error(e.getErrorMessage());
        } finally {
            defaultMQAdminExt.shutdown();
        }
    }
}

备注:defaultMQAdminExt.createTopic(brokerName, newTopic, 1);
brokerName就是下图圈中的内容
在这里插入图片描述
下图可能可以回答开篇的问题1(也是为什么可以使用前边例子中的方式创建Topic)
在这里插入图片描述

参考资料:
RocketMQ源码
RocketMQ服务搭建
RocketMQ服务Console(控制台)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值