yuz10 commented on a change in pull request #3694:
URL: https://github.com/apache/rocketmq/pull/3694#discussion_r782694019
##########
File path: docs/cn/Example_LMQ.md
##########
@@ -0,0 +1,75 @@
+# Light message queue (LMQ)
+
+
+## 一、broker启动配置
+
+
+broker.conf文件需要增加以下的配置项,开启LMQ开关,这样就可以识别LMQ相关属性的消息,进行原子分发消息到LMQ队列
+```properties
+enableLmq = true
+enableMultiDispatch = true
+```
+## 二、发送消息
+发送消息的时候通过设置 INNER_MULTI_DISPATCH 属性,LMQ queue使用逗号分割,queue前缀必须是
%LMQ%,这样broker就可以识别LMQ queue.
+```java
+DefaultMQProducer producer = new
DefaultMQProducer("please_rename_unique_group_name");
+producer.setNamesrvAddr("name-server1-ip:9876;name-server2-ip:9876");
+producer.start();
+
+
+/*
+* Create a message instance, specifying topic, tag and message body.
+*/
+Message msg = new Message("TopicTest" /* Topic */,
+ "TagA" /* Tag */,
+ ("Hello RocketMQ " +
i).getBytes(RemotingHelper.DEFAULT_CHARSET) /* Message body */
+ );
+/*
+* INNER_MULTI_DISPATCH property and PREFIX must start as "%LMQ%",
+* If it is multiple LMQ, need to use “,” split
+*/
+message.putUserProperty("INNER_MULTI_DISPATCH", "%LMQ%123,%LMQ%456");
+/*
+* Call send message to deliver message to one of brokers.
+*/
+SendResult sendResult = producer.send(msg);
+```
+## 三、拉取消息
+LMQ queue在每个broker上只有一个queue,也即queueId为0, 指明轻量级的MessageQueue,就可以拉取消息进行消费。
+```java
+DefaultMQPullConsumer defaultMQPullConsumer = new DefaultMQPullConsumer();
+defaultMQPullConsumer.setNamesrvAddr("name-server1-ip:9876;name-server2-ip:9876");
+defaultMQPullConsumer.setVipChannelEnabled(false);
+defaultMQPullConsumer.setConsumerGroup("CID_RMQ_SYS_LMQ_TEST");
+defaultMQPullConsumer.setInstanceName("CID_RMQ_SYS_LMQ_TEST");
+defaultMQPullConsumer.setRegisterTopics(new
HashSet<>(Arrays.asList("TopicTest")));
+defaultMQPullConsumer.setBrokerSuspendMaxTimeMillis(2000);
+defaultMQPullConsumer.setConsumerTimeoutMillisWhenSuspend(3000);
+defaultMQPullConsumer.start();
+
+String brokerName = "set broker Name";
+MessageQueue mq = new MessageQueue("%LMQ%123", brokerName, 0);
+
+Long offset = defaultMQPullConsumer.maxOffset(mq);
+
+defaultMQPullConsumer.pullBlockIfNotFound(
Review comment:
1. TopicTest有3个队列,因为light队列中将队列数改为1导致判断有问题。
2. broker-a 是存在的,defaultMQPullConsumer.maxOffset中代码
```
String brokerAddr =
this.mQClientFactory.findBrokerAddressInPublish(mq.getBrokerName());
if (null == brokerAddr) {
this.mQClientFactory.updateTopicRouteInfoFromNameServer(mq.getTopic());
brokerAddr =
this.mQClientFactory.findBrokerAddressInPublish(mq.getBrokerName());
}
```
updateTopicRouteInfoFromNameServer是通过topic去nameserver更新broker列表,nameserver中不存在这个topic(%LMQ%123),所以无法获取broker。**sleep
30秒等待定时器同步broker列表之后就能在缓存中拿到。**
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]