Xin Wang created IOTDB-565:
------------------------------

             Summary: MQTT Protocol Support
                 Key: IOTDB-565
                 URL: https://issues.apache.org/jira/browse/IOTDB-565
             Project: Apache IoTDB
          Issue Type: New Feature
            Reporter: Xin Wang
            Assignee: Xin Wang


# MQTT Protocol

[MQTT](http://mqtt.org/) is a machine-to-machine (M2M)/"Internet of Things" 
connectivity protocol.
It was designed as an extremely lightweight publish/subscribe messaging 
transport.
It is useful for connections with remote locations where a small code footprint 
is required and/or network bandwidth is at a premium.

The MQTT v3.1(an OASIS Standard) protocol support for IoTDB. This module 
includes the MQTT broker that allows remote devices send messages into IoTDB 
server directly.

![iotdb-mqtt](iotdb-mqtt.png)


## MQTT Broker
The MQTT Broker provide the ability of direct connection to IoTDB through MQTT. 
It listen the publish messages from MQTT clients and then
write the data into local or remote IoTDB server immediately. 
The messages payload can be format to events by `PayloadFormatter` which loaded 
by java SPI, and the default implementation is `JSONPayloadFormatter`.
The configuration of the broker locate 
`${IOTDB_HOME}/${IOTDB_CONF}/iotdb-mqtt-broker.properties`, and the startup 
scripts locate`${IOTDB_HOME}/sbin/start-mqtt-broker.sh (.bat for windows 
platform)`

![iotdb-mqtt-design](iotdb-mqtt-design.png)

## MQTT Broker Configuration
The MQTT Broker load configuration from local IoTDB server 
`${IOTDB_HOME}/${IOTDB_CONF}/iotdb-mqtt-broker.properties` by default.
If the local config file not exists, then load from classpath 
`/iotdb-mqtt-broker.properties`. Otherwise, load from the system defaults.

Configurations are as following:

| NAME | DESCRIPTION | DEFAULT |
| ------------- |:-------------:|:------:|
| mqtt_broker_host | the broker server address *Required* | 0.0.0.0 |
| mqtt_broker_port | the broker port *Required* | 1883 |
| mqtt_broker_user | the broker username *Required* | root |
| mqtt_broker_password | the broker password *Required* | root |
| mqtt_broker_handler_pool_size | the publish handler pool size | 1 |
| mqtt_broker_payload_formatter | the message payload formatter | json |
| iotdb_host | the iotdb address *Required* | 127.0.0.1 |
| iotdb_port | the iotdb port *Required* | 6667 |
| iotdb_user | the iotdb username *Required* | root |
| iotdb_password | the iotdb password *Required* | root |



## Examples
The following is an example which a mqtt client send events to MQTT broker.

 ```java
 MQTT mqtt = new MQTT();
 mqtt.setHost("127.0.0.1", 1883);
 mqtt.setUserName("root");
 mqtt.setPassword("root");

 BlockingConnection connection = mqtt.blockingConnection();
 connection.connect();

 Random random = new Random();
 for (int i = 0; i < 10; i++) {
 Map<String,Object> tuple = new HashMap();
 tuple.put("device", "root.sg.d1");
 tuple.put("timestamp", System.currentTimeMillis());
 tuple.put("measurements", "s1");
 tuple.put("values", random.nextDouble());

 String payload = JSON.toJSONString(tuple);
 connection.publish("root.sg.d1.s1", payload.getBytes(), QoS.AT_LEAST_ONCE, 
false);

 Thread.sleep(1000);
 }

 connection.disconnect();
 }
 ```



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

Reply via email to