blob: 8282c4403504c510b66a83b77865d307ff1abe3b [file] [log] [blame]
import{_ as n,a}from"./78357469-1bf11880-75e4-11ea-978f-a53996667a0d-DKQgQ3kP.js";import{_ as e,c as l,b as o,o as t}from"./app-C8175JBb.js";const p={};function r(i,s){return t(),l("div",null,s[0]||(s[0]=[o('<h1 id="mqtt-protocol" tabindex="-1"><a class="header-anchor" href="#mqtt-protocol"><span>MQTT Protocol</span></a></h1><p><a href="http://mqtt.org/" target="_blank" rel="noopener noreferrer">MQTT</a> is a machine-to-machine (M2M)/&quot;Internet of Things&quot; connectivity protocol.<br> It was designed as an extremely lightweight publish/subscribe messaging transport.<br> It is useful for connections with remote locations where a small code footprint is required and/or network bandwidth is at a premium.</p><p>IoTDB supports the MQTT v3.1(an OASIS Standard) protocol.<br> IoTDB server includes a built-in MQTT service that allows remote devices send messages into IoTDB server directly.</p><figure><img src="'+n+`" alt="" tabindex="0" loading="lazy"><figcaption></figcaption></figure><h2 id="built-in-mqtt-service" tabindex="-1"><a class="header-anchor" href="#built-in-mqtt-service"><span>Built-in MQTT Service</span></a></h2><p>The Built-in MQTT Service provide the ability of direct connection to IoTDB through MQTT. It listen the publish messages from MQTT clients<br> and then write the data into storage immediately.<br> The MQTT topic corresponds to IoTDB timeseries.<br> The messages payload can be format to events by <code>PayloadFormatter</code> which loaded by java SPI, and the default implementation is <code>JSONPayloadFormatter</code>.<br> The default <code>json</code> formatter support two json format and its json array. The following is an MQTT message payload example:</p><div class="language-json line-numbers-mode" data-highlighter="shiki" data-ext="json" data-title="json" style="background-color:#282c34;color:#abb2bf;"><pre class="shiki one-dark-pro vp-code"><code><span class="line"><span style="color:#ABB2BF;">{</span></span>
<span class="line"><span style="color:#E06C75;"> &quot;device&quot;</span><span style="color:#ABB2BF;">: </span><span style="color:#98C379;">&quot;root.sg.d1&quot;</span><span style="color:#ABB2BF;">,</span></span>
<span class="line"><span style="color:#E06C75;"> &quot;timestamp&quot;</span><span style="color:#ABB2BF;">: </span><span style="color:#D19A66;">1586076045524</span><span style="color:#ABB2BF;">,</span></span>
<span class="line"><span style="color:#E06C75;"> &quot;measurements&quot;</span><span style="color:#ABB2BF;">: [</span><span style="color:#98C379;">&quot;s1&quot;</span><span style="color:#ABB2BF;">, </span><span style="color:#98C379;">&quot;s2&quot;</span><span style="color:#ABB2BF;">],</span></span>
<span class="line"><span style="color:#E06C75;"> &quot;values&quot;</span><span style="color:#ABB2BF;">: [</span><span style="color:#D19A66;">0.530635</span><span style="color:#ABB2BF;">, </span><span style="color:#D19A66;">0.530635</span><span style="color:#ABB2BF;">]</span></span>
<span class="line"><span style="color:#ABB2BF;">}</span></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><p>or</p><div class="language-json line-numbers-mode" data-highlighter="shiki" data-ext="json" data-title="json" style="background-color:#282c34;color:#abb2bf;"><pre class="shiki one-dark-pro vp-code"><code><span class="line"><span style="color:#ABB2BF;">{</span></span>
<span class="line"><span style="color:#E06C75;"> &quot;device&quot;</span><span style="color:#ABB2BF;">: </span><span style="color:#98C379;">&quot;root.sg.d1&quot;</span><span style="color:#ABB2BF;">,</span></span>
<span class="line"><span style="color:#E06C75;"> &quot;timestamps&quot;</span><span style="color:#ABB2BF;">: [</span><span style="color:#D19A66;">1586076045524</span><span style="color:#ABB2BF;">, </span><span style="color:#D19A66;">1586076065526</span><span style="color:#ABB2BF;">],</span></span>
<span class="line"><span style="color:#E06C75;"> &quot;measurements&quot;</span><span style="color:#ABB2BF;">: [</span><span style="color:#98C379;">&quot;s1&quot;</span><span style="color:#ABB2BF;">, </span><span style="color:#98C379;">&quot;s2&quot;</span><span style="color:#ABB2BF;">],</span></span>
<span class="line"><span style="color:#E06C75;"> &quot;values&quot;</span><span style="color:#ABB2BF;">: [</span></span>
<span class="line"><span style="color:#ABB2BF;"> [</span><span style="color:#D19A66;">0.530635</span><span style="color:#ABB2BF;">, </span><span style="color:#D19A66;">0.530635</span><span style="color:#ABB2BF;">],</span></span>
<span class="line"><span style="color:#ABB2BF;"> [</span><span style="color:#D19A66;">0.530655</span><span style="color:#ABB2BF;">, </span><span style="color:#D19A66;">0.530695</span><span style="color:#ABB2BF;">]</span></span>
<span class="line"><span style="color:#ABB2BF;"> ]</span></span>
<span class="line"><span style="color:#ABB2BF;">}</span></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><p>or json array of the above two.</p><img style="width:100%;max-width:800px;max-height:600px;margin-left:auto;margin-right:auto;display:block;" src="`+a+`"><h2 id="mqtt-configurations" tabindex="-1"><a class="header-anchor" href="#mqtt-configurations"><span>MQTT Configurations</span></a></h2><p>The IoTDB MQTT service load configurations from <code>\${IOTDB_HOME}/\${IOTDB_CONF}/iotdb-system.properties</code> by default.</p><p>Configurations are as follows:</p><table><thead><tr><th>NAME</th><th style="text-align:center;">DESCRIPTION</th><th style="text-align:center;">DEFAULT</th></tr></thead><tbody><tr><td>enable_mqtt_service</td><td style="text-align:center;">whether to enable the mqtt service</td><td style="text-align:center;">false</td></tr><tr><td>mqtt_host</td><td style="text-align:center;">the mqtt service binding host</td><td style="text-align:center;">127.0.0.1</td></tr><tr><td>mqtt_port</td><td style="text-align:center;">the mqtt service binding port</td><td style="text-align:center;">1883</td></tr><tr><td>mqtt_handler_pool_size</td><td style="text-align:center;">the handler pool size for handing the mqtt messages</td><td style="text-align:center;">1</td></tr><tr><td>mqtt_payload_formatter</td><td style="text-align:center;">the mqtt message payload formatter</td><td style="text-align:center;">json</td></tr><tr><td>mqtt_max_message_size</td><td style="text-align:center;">the max mqtt message size in byte</td><td style="text-align:center;">1048576</td></tr></tbody></table><h2 id="coding-examples" tabindex="-1"><a class="header-anchor" href="#coding-examples"><span>Coding Examples</span></a></h2><p>The following is an example which a mqtt client send messages to IoTDB server.</p><div class="language-java line-numbers-mode" data-highlighter="shiki" data-ext="java" data-title="java" style="background-color:#282c34;color:#abb2bf;"><pre class="shiki one-dark-pro vp-code"><code><span class="line"><span style="color:#E5C07B;">MQTT</span><span style="color:#E06C75;"> mqtt </span><span style="color:#56B6C2;">=</span><span style="color:#C678DD;"> new</span><span style="color:#61AFEF;"> MQTT</span><span style="color:#E06C75;">()</span><span style="color:#ABB2BF;">;</span></span>
<span class="line"><span style="color:#E5C07B;">mqtt</span><span style="color:#ABB2BF;">.</span><span style="color:#61AFEF;">setHost</span><span style="color:#ABB2BF;">(</span><span style="color:#98C379;">&quot;127.0.0.1&quot;</span><span style="color:#ABB2BF;">, </span><span style="color:#D19A66;">1883</span><span style="color:#ABB2BF;">);</span></span>
<span class="line"><span style="color:#E5C07B;">mqtt</span><span style="color:#ABB2BF;">.</span><span style="color:#61AFEF;">setUserName</span><span style="color:#ABB2BF;">(</span><span style="color:#98C379;">&quot;root&quot;</span><span style="color:#ABB2BF;">);</span></span>
<span class="line"><span style="color:#E5C07B;">mqtt</span><span style="color:#ABB2BF;">.</span><span style="color:#61AFEF;">setPassword</span><span style="color:#ABB2BF;">(</span><span style="color:#98C379;">&quot;root&quot;</span><span style="color:#ABB2BF;">);</span></span>
<span class="line"></span>
<span class="line"><span style="color:#E5C07B;">BlockingConnection</span><span style="color:#E06C75;"> connection </span><span style="color:#56B6C2;">=</span><span style="color:#E5C07B;"> mqtt</span><span style="color:#ABB2BF;">.</span><span style="color:#61AFEF;">blockingConnection</span><span style="color:#ABB2BF;">();</span></span>
<span class="line"><span style="color:#E5C07B;">connection</span><span style="color:#ABB2BF;">.</span><span style="color:#61AFEF;">connect</span><span style="color:#ABB2BF;">();</span></span>
<span class="line"></span>
<span class="line"><span style="color:#E5C07B;">Random</span><span style="color:#E06C75;"> random </span><span style="color:#56B6C2;">=</span><span style="color:#C678DD;"> new</span><span style="color:#61AFEF;"> Random</span><span style="color:#E06C75;">()</span><span style="color:#ABB2BF;">;</span></span>
<span class="line"><span style="color:#C678DD;">for</span><span style="color:#E06C75;"> (</span><span style="color:#C678DD;">int</span><span style="color:#E06C75;"> i </span><span style="color:#56B6C2;">=</span><span style="color:#D19A66;"> 0</span><span style="color:#ABB2BF;">;</span><span style="color:#E06C75;"> i </span><span style="color:#56B6C2;">&lt;</span><span style="color:#D19A66;"> 10</span><span style="color:#ABB2BF;">;</span><span style="color:#E06C75;"> i</span><span style="color:#ABB2BF;">++</span><span style="color:#E06C75;">) {</span></span>
<span class="line"><span style="color:#E5C07B;"> String</span><span style="color:#E06C75;"> payload </span><span style="color:#56B6C2;">=</span><span style="color:#E5C07B;"> String</span><span style="color:#ABB2BF;">.</span><span style="color:#61AFEF;">format</span><span style="color:#ABB2BF;">(</span><span style="color:#98C379;">&quot;{</span><span style="color:#56B6C2;">\\n</span><span style="color:#98C379;">&quot;</span><span style="color:#56B6C2;"> +</span></span>
<span class="line"><span style="color:#98C379;"> &quot;</span><span style="color:#56B6C2;">\\&quot;</span><span style="color:#98C379;">device</span><span style="color:#56B6C2;">\\&quot;</span><span style="color:#98C379;">:</span><span style="color:#56B6C2;">\\&quot;</span><span style="color:#98C379;">root.sg.d1</span><span style="color:#56B6C2;">\\&quot;</span><span style="color:#98C379;">,</span><span style="color:#56B6C2;">\\n</span><span style="color:#98C379;">&quot;</span><span style="color:#56B6C2;"> +</span></span>
<span class="line"><span style="color:#98C379;"> &quot;</span><span style="color:#56B6C2;">\\&quot;</span><span style="color:#98C379;">timestamp</span><span style="color:#56B6C2;">\\&quot;</span><span style="color:#98C379;">:%d,</span><span style="color:#56B6C2;">\\n</span><span style="color:#98C379;">&quot;</span><span style="color:#56B6C2;"> +</span></span>
<span class="line"><span style="color:#98C379;"> &quot;</span><span style="color:#56B6C2;">\\&quot;</span><span style="color:#98C379;">measurements</span><span style="color:#56B6C2;">\\&quot;</span><span style="color:#98C379;">:[</span><span style="color:#56B6C2;">\\&quot;</span><span style="color:#98C379;">s1</span><span style="color:#56B6C2;">\\&quot;</span><span style="color:#98C379;">],</span><span style="color:#56B6C2;">\\n</span><span style="color:#98C379;">&quot;</span><span style="color:#56B6C2;"> +</span></span>
<span class="line"><span style="color:#98C379;"> &quot;</span><span style="color:#56B6C2;">\\&quot;</span><span style="color:#98C379;">values</span><span style="color:#56B6C2;">\\&quot;</span><span style="color:#98C379;">:[%f]</span><span style="color:#56B6C2;">\\n</span><span style="color:#98C379;">&quot;</span><span style="color:#56B6C2;"> +</span></span>
<span class="line"><span style="color:#98C379;"> &quot;}&quot;</span><span style="color:#ABB2BF;">, </span><span style="color:#E5C07B;">System</span><span style="color:#ABB2BF;">.</span><span style="color:#61AFEF;">currentTimeMillis</span><span style="color:#ABB2BF;">(), </span><span style="color:#E5C07B;">random</span><span style="color:#ABB2BF;">.</span><span style="color:#61AFEF;">nextDouble</span><span style="color:#ABB2BF;">());</span></span>
<span class="line"></span>
<span class="line"><span style="color:#E5C07B;"> connection</span><span style="color:#ABB2BF;">.</span><span style="color:#61AFEF;">publish</span><span style="color:#ABB2BF;">(</span><span style="color:#98C379;">&quot;root.sg.d1.s1&quot;</span><span style="color:#ABB2BF;">, </span><span style="color:#E5C07B;">payload</span><span style="color:#ABB2BF;">.</span><span style="color:#61AFEF;">getBytes</span><span style="color:#ABB2BF;">(), </span><span style="color:#E5C07B;">QoS</span><span style="color:#ABB2BF;">.</span><span style="color:#E5C07B;">AT_LEAST_ONCE</span><span style="color:#ABB2BF;">, </span><span style="color:#D19A66;">false</span><span style="color:#ABB2BF;">);</span></span>
<span class="line"><span style="color:#E06C75;">}</span></span>
<span class="line"></span>
<span class="line"><span style="color:#E5C07B;">connection</span><span style="color:#ABB2BF;">.</span><span style="color:#61AFEF;">disconnect</span><span style="color:#ABB2BF;">();</span></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h2 id="customize-your-mqtt-message-format" tabindex="-1"><a class="header-anchor" href="#customize-your-mqtt-message-format"><span>Customize your MQTT Message Format</span></a></h2><p>If you do not like the above Json format, you can customize your MQTT Message format by just writing several lines<br> of codes. An example can be found in <a href="https://github.com/apache/iotdb/tree/rc/1.3.3/example/mqtt-customize" target="_blank" rel="noopener noreferrer">example/mqtt-customize</a> project.</p><p>Steps:</p><ol><li><p>Create a java project, and add dependency:</p><div class="language-xml line-numbers-mode" data-highlighter="shiki" data-ext="xml" data-title="xml" style="background-color:#282c34;color:#abb2bf;"><pre class="shiki one-dark-pro vp-code"><code><span class="line"><span style="color:#ABB2BF;"> &lt;</span><span style="color:#E06C75;">dependency</span><span style="color:#ABB2BF;">&gt;</span></span>
<span class="line"><span style="color:#ABB2BF;"> &lt;</span><span style="color:#E06C75;">groupId</span><span style="color:#ABB2BF;">&gt;org.apache.iotdb&lt;/</span><span style="color:#E06C75;">groupId</span><span style="color:#ABB2BF;">&gt;</span></span>
<span class="line"><span style="color:#ABB2BF;"> &lt;</span><span style="color:#E06C75;">artifactId</span><span style="color:#ABB2BF;">&gt;iotdb-server&lt;/</span><span style="color:#E06C75;">artifactId</span><span style="color:#ABB2BF;">&gt;</span></span>
<span class="line"><span style="color:#ABB2BF;"> &lt;</span><span style="color:#E06C75;">version</span><span style="color:#ABB2BF;">&gt;1.1.0-SNAPSHOT&lt;/</span><span style="color:#E06C75;">version</span><span style="color:#ABB2BF;">&gt;</span></span>
<span class="line"><span style="color:#ABB2BF;"> &lt;/</span><span style="color:#E06C75;">dependency</span><span style="color:#ABB2BF;">&gt;</span></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div></li><li><p>Define your implementation which implements <code>org.apache.iotdb.db.protocol.mqtt.PayloadFormatter</code><br> e.g.,</p><div class="language-java line-numbers-mode" data-highlighter="shiki" data-ext="java" data-title="java" style="background-color:#282c34;color:#abb2bf;"><pre class="shiki one-dark-pro vp-code"><code><span class="line"><span style="color:#C678DD;">package</span><span style="color:#C678DD;"> org.apache.iotdb.mqtt.server</span><span style="color:#ABB2BF;">;</span></span>
<span class="line"></span>
<span class="line"><span style="color:#C678DD;">import</span><span style="color:#E5C07B;"> io.netty.buffer.ByteBuf</span><span style="color:#ABB2BF;">;</span></span>
<span class="line"><span style="color:#C678DD;">import</span><span style="color:#E5C07B;"> org.apache.iotdb.db.protocol.mqtt.Message</span><span style="color:#ABB2BF;">;</span></span>
<span class="line"><span style="color:#C678DD;">import</span><span style="color:#E5C07B;"> org.apache.iotdb.db.protocol.mqtt.PayloadFormatter</span><span style="color:#ABB2BF;">;</span></span>
<span class="line"></span>
<span class="line"><span style="color:#C678DD;">import</span><span style="color:#E5C07B;"> java.nio.charset.StandardCharsets</span><span style="color:#ABB2BF;">;</span></span>
<span class="line"><span style="color:#C678DD;">import</span><span style="color:#E5C07B;"> java.util.ArrayList</span><span style="color:#ABB2BF;">;</span></span>
<span class="line"><span style="color:#C678DD;">import</span><span style="color:#E5C07B;"> java.util.Arrays</span><span style="color:#ABB2BF;">;</span></span>
<span class="line"><span style="color:#C678DD;">import</span><span style="color:#E5C07B;"> java.util.List</span><span style="color:#ABB2BF;">;</span></span>
<span class="line"></span>
<span class="line"><span style="color:#C678DD;">public</span><span style="color:#C678DD;"> class</span><span style="color:#E5C07B;"> CustomizedJsonPayloadFormatter</span><span style="color:#C678DD;"> implements</span><span style="color:#E5C07B;"> PayloadFormatter</span><span style="color:#ABB2BF;"> {</span></span>
<span class="line"></span>
<span class="line"><span style="color:#ABB2BF;"> @</span><span style="color:#E5C07B;">Override</span></span>
<span class="line"><span style="color:#C678DD;"> public</span><span style="color:#E5C07B;"> List</span><span style="color:#ABB2BF;">&lt;</span><span style="color:#E5C07B;">Message</span><span style="color:#ABB2BF;">&gt;</span><span style="color:#61AFEF;"> format</span><span style="color:#ABB2BF;">(</span><span style="color:#E5C07B;">ByteBuf</span><span style="color:#E06C75;font-style:italic;"> payload</span><span style="color:#ABB2BF;">)</span><span style="color:#ABB2BF;"> {</span></span>
<span class="line"><span style="color:#7F848E;font-style:italic;"> // Suppose the payload is a json format</span></span>
<span class="line"><span style="color:#C678DD;"> if</span><span style="color:#ABB2BF;"> (payload </span><span style="color:#56B6C2;">==</span><span style="color:#D19A66;"> null</span><span style="color:#ABB2BF;">) {</span></span>
<span class="line"><span style="color:#C678DD;"> return</span><span style="color:#D19A66;"> null</span><span style="color:#ABB2BF;">;</span></span>
<span class="line"><span style="color:#ABB2BF;"> }</span></span>
<span class="line"></span>
<span class="line"><span style="color:#E5C07B;"> String</span><span style="color:#E06C75;"> json</span><span style="color:#56B6C2;"> =</span><span style="color:#E5C07B;"> payload</span><span style="color:#ABB2BF;">.</span><span style="color:#61AFEF;">toString</span><span style="color:#ABB2BF;">(</span><span style="color:#E5C07B;">StandardCharsets</span><span style="color:#ABB2BF;">.</span><span style="color:#E5C07B;">UTF_8</span><span style="color:#ABB2BF;">);</span></span>
<span class="line"><span style="color:#7F848E;font-style:italic;"> // parse data from the json and generate Messages and put them into List&lt;Meesage&gt; ret</span></span>
<span class="line"><span style="color:#E5C07B;"> List</span><span style="color:#ABB2BF;">&lt;</span><span style="color:#E5C07B;">Message</span><span style="color:#ABB2BF;">&gt; </span><span style="color:#E06C75;">ret</span><span style="color:#56B6C2;"> =</span><span style="color:#C678DD;"> new</span><span style="color:#E5C07B;"> ArrayList</span><span style="color:#ABB2BF;">&lt;&gt;();</span></span>
<span class="line"><span style="color:#7F848E;font-style:italic;"> // this is just an example, so we just generate some Messages directly</span></span>
<span class="line"><span style="color:#C678DD;"> for</span><span style="color:#ABB2BF;"> (</span><span style="color:#C678DD;">int</span><span style="color:#E06C75;"> i</span><span style="color:#56B6C2;"> =</span><span style="color:#D19A66;"> 0</span><span style="color:#ABB2BF;">; i </span><span style="color:#56B6C2;">&lt;</span><span style="color:#D19A66;"> 2</span><span style="color:#ABB2BF;">; i++) {</span></span>
<span class="line"><span style="color:#C678DD;"> long</span><span style="color:#E06C75;"> ts</span><span style="color:#56B6C2;"> =</span><span style="color:#ABB2BF;"> i;</span></span>
<span class="line"><span style="color:#E5C07B;"> Message</span><span style="color:#E06C75;"> message</span><span style="color:#56B6C2;"> =</span><span style="color:#C678DD;"> new</span><span style="color:#61AFEF;"> Message</span><span style="color:#ABB2BF;">();</span></span>
<span class="line"><span style="color:#E5C07B;"> message</span><span style="color:#ABB2BF;">.</span><span style="color:#61AFEF;">setDevice</span><span style="color:#ABB2BF;">(</span><span style="color:#98C379;">&quot;d&quot;</span><span style="color:#56B6C2;"> +</span><span style="color:#ABB2BF;"> i);</span></span>
<span class="line"><span style="color:#E5C07B;"> message</span><span style="color:#ABB2BF;">.</span><span style="color:#61AFEF;">setTimestamp</span><span style="color:#ABB2BF;">(ts);</span></span>
<span class="line"><span style="color:#E5C07B;"> message</span><span style="color:#ABB2BF;">.</span><span style="color:#61AFEF;">setMeasurements</span><span style="color:#ABB2BF;">(</span><span style="color:#E5C07B;">Arrays</span><span style="color:#ABB2BF;">.</span><span style="color:#61AFEF;">asList</span><span style="color:#ABB2BF;">(</span><span style="color:#98C379;">&quot;s1&quot;</span><span style="color:#ABB2BF;">, </span><span style="color:#98C379;">&quot;s2&quot;</span><span style="color:#ABB2BF;">));</span></span>
<span class="line"><span style="color:#E5C07B;"> message</span><span style="color:#ABB2BF;">.</span><span style="color:#61AFEF;">setValues</span><span style="color:#ABB2BF;">(</span><span style="color:#E5C07B;">Arrays</span><span style="color:#ABB2BF;">.</span><span style="color:#61AFEF;">asList</span><span style="color:#ABB2BF;">(</span><span style="color:#98C379;">&quot;4.0&quot;</span><span style="color:#56B6C2;"> +</span><span style="color:#ABB2BF;"> i, </span><span style="color:#98C379;">&quot;5.0&quot;</span><span style="color:#56B6C2;"> +</span><span style="color:#ABB2BF;"> i));</span></span>
<span class="line"><span style="color:#E5C07B;"> ret</span><span style="color:#ABB2BF;">.</span><span style="color:#61AFEF;">add</span><span style="color:#ABB2BF;">(message);</span></span>
<span class="line"><span style="color:#ABB2BF;"> }</span></span>
<span class="line"><span style="color:#C678DD;"> return</span><span style="color:#ABB2BF;"> ret;</span></span>
<span class="line"><span style="color:#ABB2BF;"> }</span></span>
<span class="line"></span>
<span class="line"><span style="color:#ABB2BF;"> @</span><span style="color:#E5C07B;">Override</span></span>
<span class="line"><span style="color:#C678DD;"> public</span><span style="color:#E5C07B;"> String</span><span style="color:#61AFEF;"> getName</span><span style="color:#ABB2BF;">()</span><span style="color:#ABB2BF;"> {</span></span>
<span class="line"><span style="color:#7F848E;font-style:italic;"> // set the value of mqtt_payload_formatter in iotdb-system.properties as the following string:</span></span>
<span class="line"><span style="color:#C678DD;"> return</span><span style="color:#98C379;"> &quot;CustomizedJson&quot;</span><span style="color:#ABB2BF;">;</span></span>
<span class="line"><span style="color:#ABB2BF;"> }</span></span>
<span class="line"><span style="color:#ABB2BF;">}</span></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div></li><li><p>modify the file in <code>src/main/resources/META-INF/services/org.apache.iotdb.db.protocol.mqtt.PayloadFormatter</code>:<br> clean the file and put your implementation class name into the file.<br> In this example, the content is: <code>org.apache.iotdb.mqtt.server.CustomizedJsonPayloadFormatter</code></p></li><li><p>compile your implementation as a jar file: <code>mvn package -DskipTests</code></p></li></ol><p>Then, in your server:</p><ol><li>Create \${IOTDB_HOME}/ext/mqtt/ folder, and put the jar into this folder.</li><li>Update configuration to enable MQTT service. (<code>enable_mqtt_service=true</code> in <code>conf/iotdb-system.properties</code>)</li><li>Set the value of <code>mqtt_payload_formatter</code> in <code>conf/iotdb-system.properties</code> as the value of getName() in your implementation<br> , in this example, the value is <code>CustomizedJson</code></li><li>Launch the IoTDB server.</li><li>Now IoTDB will use your implementation to parse the MQTT message.</li></ol><p>More: the message format can be anything you want. For example, if it is a binary format,<br> just use <code>payload.forEachByte()</code> or <code>payload.array</code> to get bytes content.</p>`,25)]))}const d=e(p,[["render",r],["__file","Programming-MQTT.html.vue"]]),y=JSON.parse('{"path":"/UserGuide/V1.3.x/API/Programming-MQTT.html","title":"MQTT Protocol","lang":"en-US","frontmatter":{"description":"MQTT Protocol MQTT is a machine-to-machine (M2M)/\\"Internet of Things\\" connectivity protocol. It was designed as an extremely lightweight publish/subscribe messaging transport. I...","head":[["link",{"rel":"alternate","hreflang":"zh-cn","href":"https://iotdb.apache.org/zh/UserGuide/V1.3.x/API/Programming-MQTT.html"}],["meta",{"property":"og:url","content":"https://iotdb.apache.org/UserGuide/V1.3.x/API/Programming-MQTT.html"}],["meta",{"property":"og:site_name","content":"IoTDB Website"}],["meta",{"property":"og:title","content":"MQTT Protocol"}],["meta",{"property":"og:description","content":"MQTT Protocol MQTT is a machine-to-machine (M2M)/\\"Internet of Things\\" connectivity protocol. It was designed as an extremely lightweight publish/subscribe messaging transport. I..."}],["meta",{"property":"og:type","content":"article"}],["meta",{"property":"og:image","content":"https://iotdb.apache.org/img/github/78357432-0c71cf80-75e4-11ea-98aa-c43a54d469ce.png"}],["meta",{"property":"og:locale","content":"en-US"}],["meta",{"property":"og:locale:alternate","content":"zh-CN"}],["meta",{"property":"og:updated_time","content":"2025-03-05T10:17:06.000Z"}],["meta",{"property":"article:modified_time","content":"2025-03-05T10:17:06.000Z"}],["script",{"type":"application/ld+json"},"{\\"@context\\":\\"https://schema.org\\",\\"@type\\":\\"Article\\",\\"headline\\":\\"MQTT Protocol\\",\\"image\\":[\\"https://iotdb.apache.org/img/github/78357432-0c71cf80-75e4-11ea-98aa-c43a54d469ce.png\\"],\\"dateModified\\":\\"2025-03-05T10:17:06.000Z\\",\\"author\\":[]}"]]},"headers":[{"level":2,"title":"Built-in MQTT Service","slug":"built-in-mqtt-service","link":"#built-in-mqtt-service","children":[]},{"level":2,"title":"MQTT Configurations","slug":"mqtt-configurations","link":"#mqtt-configurations","children":[]},{"level":2,"title":"Coding Examples","slug":"coding-examples","link":"#coding-examples","children":[]},{"level":2,"title":"Customize your MQTT Message Format","slug":"customize-your-mqtt-message-format","link":"#customize-your-mqtt-message-format","children":[]}],"git":{"createdTime":1688958677000,"updatedTime":1741169826000,"contributors":[{"name":"CritasWang","username":"CritasWang","email":"critas@outlook.com","commits":4,"url":"https://github.com/CritasWang"},{"name":"Lei","username":"Lei","email":"33376433+LeiRui@users.noreply.github.com","commits":1,"url":"https://github.com/Lei"},{"name":"YuFengLiu","username":"YuFengLiu","email":"38746920+l2280212@users.noreply.github.com","commits":1,"url":"https://github.com/YuFengLiu"},{"name":"shuwenwei","username":"shuwenwei","email":"55970239+shuwenwei@users.noreply.github.com","commits":1,"url":"https://github.com/shuwenwei"},{"name":"majialin","username":"majialin","email":"107627937+mal117@users.noreply.github.com","commits":1,"url":"https://github.com/majialin"},{"name":"W1y1r","username":"W1y1r","email":"150988475+W1y1r@users.noreply.github.com","commits":4,"url":"https://github.com/W1y1r"},{"name":"Mister-Hope","username":"Mister-Hope","email":"mister-hope@outlook.com","commits":1,"url":"https://github.com/Mister-Hope"},{"name":"leto-b","username":"leto-b","email":"bingqian.bai@timecho.com","commits":1,"url":"https://github.com/leto-b"}]},"readingTime":{"minutes":2.71,"words":812},"filePathRelative":"UserGuide/V1.3.x/API/Programming-MQTT.md","localizedDate":"July 10, 2023","autoDesc":true}');export{d as comp,y as data};