关于rocketmq与rocketmq-mqtt之间的acl控制

前言

因业务需求需要在rocketmq中整合mqtt,期间遇到了许多问题,在此处记录

一、安装rocketmq和rocket-mqtt并能正常测试

具体参考rocketmq使用mqtt协议_rocketmq mqtt-优快云博客

如果按照该博客流程走,是可以正常生产和订阅的,其中补充遇到的几点坑

1. mqtt并不会自动创建索引,所以autoCreateTopicEnable属性不会生效,需要手动创建,会报如图所示的错误

2. 如果遇到了只能生产不能消费,有以下几种可能

2.1 未创建通配符列表(topic命名为mqtttest,rocketmq地址为192.168.5.251:9876为例)

配置通配符列表
sh mqadmin updateKvConfig -s LMQ -k mqtttest -v mqtttest/+ -n 192.168.5.251:9876

2.2 如果还是不能生效且是rocetmq生产,mqtt消费情景,有可能是子topic未设置(以子topic命名为task为例,用rocketmq消费断点可以看见,两种方式生产的数据差异在于properties中属性的不同,特别是mqtt生产中多出的INNER_MULTI_DISPATCH属性)

具体两者差异如下

#mqtt生产者
properties={CONSUME_START_TIME=1706501170642, MSG_REGION=DefaultRegion, UNIQ_KEY=C0A80510BC640EED1F1492CA922D0BBA, CLUSTER=DefaultCluster, INNER_MULTI_QUEUE_OFFSET=560,383, MIN_OFFSET=0, qosLevel=1, TAGS=MQTT_COMMON, TRACE_ON=true, originMqttTopic=mqtttest/task, INNER_MULTI_DISPATCH=%LMQ%mqtttest%+%,%LMQ%mqtttest%task%, IS_EMPTY_MSG=false, retryTimes=0, extData={"qosLevel":"1"}, MAX_OFFSET=191}

#rocketmq生产者
properties={CONSUME_START_TIME=1706509718866, MSG_REGION=DefaultRegion, UNIQ_KEY=C0A80C9A833873D16E93934D554F0009, CLUSTER=DefaultCluster, MIN_OFFSET=0, TAGS=task, WAIT=true, TRACE_ON=true, MAX_OFFSET=235}

具体代码参考rocketmq-mqtt源码中的RocketMQProducer

生产者关键代码:

static void sendMsg(DefaultMQProducer producer, String topic, String tag) throws Exception {
	    byte[] bytes = ("Hello RocketMQ " + topic + "/" + tag + DateUtil.formatDateTime(new Date())).getBytes(RemotingHelper.DEFAULT_CHARSET);
        // 创建消息,并指定Topic,Tag和消息体
        Message msg = new Message("mqtttest","MQTT_COMMON",bytes);
        
        String secondTopic = "/task";
        setLmq(msg, new HashSet<>(Arrays.asList(TopicUtils.wrapLmq(topic, secondTopic))));
        // 发送异步消息
        producer.send(msg,new SendCallback() {
            
            @Override
            public void onSuccess(SendResult sendResult) {
                System.out.println("发送结果:" + s
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值