A new MQTT protocol architecture model, based on which RocketMQ can better support messages from terminals such as IoT devices and Mobile APP. Based on the RocketMQ message unified storage engine, it supports both MQTT terminal and server message sending and receiving.
The relevant architecture design is introduced in RIP-33. The queue model of MQTT needs to be based on the light message queue, For the design of the specific light message queue, please refer to the RIP-28(LMQ)-wiki of RocketMQ.
The queue model of MQTT needs to be based on the light message queue feature (RIP-28) of RocketMQ. RocketMQ has only supported this feature since version 4.9.3. Please ensure that the installed version of RocketMQ already supports this feature.
For the quick start of light message queue, please refer to Example_LMQ of RocketMQ. For example, set the following parameters to true in broker.conf
enableLmq = true
enableMultiDispatch = true
- Clone
git clone https://github.com/apache/rocketmq-mqtt
- Build the package
cd rocketmq-mqtt
mvn clean package -DskipTests=true assembly:assembly
- Config
cp -r target/rocketmq-mqtt/rocketmq-mqtt ~
cd ~/rocketmq-mqtt
cd conf
Some important configuration items in the service.conf configuration file
Config Key | Instruction |
---|---|
username | used for auth |
secretKey | used for auth |
NAMESRV_ADDR | specify namesrv address |
eventNotifyRetryTopic | notify event retry topic |
clientRetryTopic | client retry topic |
And some configuration items in themeta.conf configuration file
Config Key | Instruction |
---|---|
allNodeAddress | meta kv all nodes ip, e.g. 192.168.0.1,192.168.0.2,192.168.0.3 |
metaPort | corresponding port, e.g. 25000 |
-
CreateTopic
create all first-level topics, including eventNotifyRetryTopic and clientRetryTopic in the configuration file above.
sh mqadmin updatetopic -c {cluster} -t {topic} -n {namesrv}
- Initialize Meta
- Configure Gateway Node List
sh mqadmin updateKvConfig -s LMQ -k LMQ_CONNECT_NODES -v {ip1,ip2} -n {namesrv}
- Configure the first-level topic list
sh mqadmin updateKvConfig -s LMQ -k ALL_FIRST_TOPICS -v {topic1,topic2} -n {namesrv}
- Configure a list of wildcard characters under each first-level topic
sh mqadmin updateKvConfig -s LMQ -k {topic} -v {topic/+} -n {namesrv}
- start meta kv if necessary
cd bin
sh meta.sh start
- Start Process
cd bin
sh mqtt.sh start
The mqtt-example module has written basic usage example code, which can be used for reference
The currently supported protocol version is MQTT 3.1.1, but the will and retain features are not supported yet
At present, an implementation based on the HmacSHA1 signature algorithm is provided by default, Refer to AuthManagerSample. Users can customize other implementations to meet the needs of businesses to flexibly verify resources and identities.
At present, meta data storage and management is simply implemented through the kvconfig mechanism of namesrv by default, Refer to MetaPersistManagerSample. Users can customize other implementations.
Apache License, Version 2.0 Copyright (C) Apache Software Foundation.