| import{_ as n,a}from"./78357469-1bf11880-75e4-11ea-978f-a53996667a0d-DKQgQ3kP.js";import{_ as l,c as e,b as o,o as t}from"./app-C8175JBb.js";const p={};function r(c,s){return t(),e("div",null,s[0]||(s[0]=[o('<h1 id="mqtt-协议" tabindex="-1"><a class="header-anchor" href="#mqtt-协议"><span>MQTT 协议</span></a></h1><p><a href="http://mqtt.org/" target="_blank" rel="noopener noreferrer">MQTT</a> 是机器对机器(M2M)/“物联网”连接协议。</p><p>它被设计为一种非常轻量级的发布/订阅消息传递。</p><p>对于与需要较小代码占用和/或网络带宽非常宝贵的远程位置的连接很有用。</p><p>IoTDB 支持 MQTT v3.1(OASIS 标准)协议。<br> IoTDB 服务器包括内置的 MQTT 服务,该服务允许远程设备将消息直接发送到 IoTDB 服务器。</p><img style="width:100%;max-width:800px;max-height:600px;margin-left:auto;margin-right:auto;display:block;" src="'+n+`"><h2 id="内置-mqtt-服务" tabindex="-1"><a class="header-anchor" href="#内置-mqtt-服务"><span>内置 MQTT 服务</span></a></h2><p>内置的 MQTT 服务提供了通过 MQTT 直接连接到 IoTDB 的能力。 它侦听来自 MQTT 客户端的发布消息,然后立即将数据写入存储。<br> MQTT 主题与 IoTDB 时间序列相对应。<br> 消息有效载荷可以由 Java SPI 加载的<code>PayloadFormatter</code>格式化为事件,默认实现为<code>JSONPayloadFormatter</code><br> 默认的<code>json</code>格式化程序支持两种 json 格式以及由他们组成的json数组,以下是 MQTT 消息有效负载示例:</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;"> "device"</span><span style="color:#ABB2BF;">:</span><span style="color:#98C379;">"root.sg.d1"</span><span style="color:#ABB2BF;">,</span></span> |
| <span class="line"><span style="color:#E06C75;"> "timestamp"</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;"> "measurements"</span><span style="color:#ABB2BF;">:[</span><span style="color:#98C379;">"s1"</span><span style="color:#ABB2BF;">,</span><span style="color:#98C379;">"s2"</span><span style="color:#ABB2BF;">],</span></span> |
| <span class="line"><span style="color:#E06C75;"> "values"</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>或者</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;"> "device"</span><span style="color:#ABB2BF;">:</span><span style="color:#98C379;">"root.sg.d1"</span><span style="color:#ABB2BF;">,</span></span> |
| <span class="line"><span style="color:#E06C75;"> "timestamps"</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;"> "measurements"</span><span style="color:#ABB2BF;">:[</span><span style="color:#98C379;">"s1"</span><span style="color:#ABB2BF;">,</span><span style="color:#98C379;">"s2"</span><span style="color:#ABB2BF;">],</span></span> |
| <span class="line"><span style="color:#E06C75;"> "values"</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 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></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>或者以上两者的JSON数组形式。</p><img style="width:100%;max-width:800px;max-height:600px;margin-left:auto;margin-right:auto;display:block;" src="`+a+`"><h2 id="mqtt-配置" tabindex="-1"><a class="header-anchor" href="#mqtt-配置"><span>MQTT 配置</span></a></h2><p>默认情况下,IoTDB MQTT 服务从<code>\${IOTDB_HOME}/\${IOTDB_CONF}/iotdb-system.properties</code>加载配置。</p><p>配置如下:</p><table><thead><tr><th>名称</th><th style="text-align:center;">描述</th><th style="text-align:center;">默认</th></tr></thead><tbody><tr><td>enable_mqtt_service</td><td style="text-align:center;">是否启用 mqtt 服务</td><td style="text-align:center;">false</td></tr><tr><td>mqtt_host</td><td style="text-align:center;">mqtt 服务绑定主机</td><td style="text-align:center;">127.0.0.1</td></tr><tr><td>mqtt_port</td><td style="text-align:center;">mqtt 服务绑定端口</td><td style="text-align:center;">1883</td></tr><tr><td>mqtt_handler_pool_size</td><td style="text-align:center;">处理 mqtt 消息的处理程序池大小</td><td style="text-align:center;">1</td></tr><tr><td>mqtt_payload_formatter</td><td style="text-align:center;">mqtt 消息有效负载格式化程序</td><td style="text-align:center;">json</td></tr><tr><td>mqtt_max_message_size</td><td style="text-align:center;">mqtt 消息最大长度(字节)</td><td style="text-align:center;">1048576</td></tr></tbody></table><p>## 示例代码<br> 以下是 mqtt 客户端将消息发送到 IoTDB 服务器的示例。</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;">"127.0.0.1"</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;">"root"</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;">"root"</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;"><</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;">"{</span><span style="color:#56B6C2;">\\n</span><span style="color:#98C379;">"</span><span style="color:#56B6C2;"> +</span></span> |
| <span class="line"><span style="color:#98C379;"> "</span><span style="color:#56B6C2;">\\"</span><span style="color:#98C379;">device</span><span style="color:#56B6C2;">\\"</span><span style="color:#98C379;">:</span><span style="color:#56B6C2;">\\"</span><span style="color:#98C379;">root.sg.d1</span><span style="color:#56B6C2;">\\"</span><span style="color:#98C379;">,</span><span style="color:#56B6C2;">\\n</span><span style="color:#98C379;">"</span><span style="color:#56B6C2;"> +</span></span> |
| <span class="line"><span style="color:#98C379;"> "</span><span style="color:#56B6C2;">\\"</span><span style="color:#98C379;">timestamp</span><span style="color:#56B6C2;">\\"</span><span style="color:#98C379;">:%d,</span><span style="color:#56B6C2;">\\n</span><span style="color:#98C379;">"</span><span style="color:#56B6C2;"> +</span></span> |
| <span class="line"><span style="color:#98C379;"> "</span><span style="color:#56B6C2;">\\"</span><span style="color:#98C379;">measurements</span><span style="color:#56B6C2;">\\"</span><span style="color:#98C379;">:[</span><span style="color:#56B6C2;">\\"</span><span style="color:#98C379;">s1</span><span style="color:#56B6C2;">\\"</span><span style="color:#98C379;">],</span><span style="color:#56B6C2;">\\n</span><span style="color:#98C379;">"</span><span style="color:#56B6C2;"> +</span></span> |
| <span class="line"><span style="color:#98C379;"> "</span><span style="color:#56B6C2;">\\"</span><span style="color:#98C379;">values</span><span style="color:#56B6C2;">\\"</span><span style="color:#98C379;">:[%f]</span><span style="color:#56B6C2;">\\n</span><span style="color:#98C379;">"</span><span style="color:#56B6C2;"> +</span></span> |
| <span class="line"><span style="color:#98C379;"> "}"</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;">"root.sg.d1.s1"</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="自定义-mqtt-消息格式" tabindex="-1"><a class="header-anchor" href="#自定义-mqtt-消息格式"><span>自定义 MQTT 消息格式</span></a></h2><p>事实上可以通过简单编程来实现 MQTT 消息的格式自定义。<br> 可以在源码的 <code>example/mqtt-customize</code> 项目中找到一个简单示例。</p><p>步骤:</p><ol><li>创建一个 Java 项目,增加如下依赖</li></ol><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;"> <</span><span style="color:#E06C75;">dependency</span><span style="color:#ABB2BF;">></span></span> |
| <span class="line"><span style="color:#ABB2BF;"> <</span><span style="color:#E06C75;">groupId</span><span style="color:#ABB2BF;">>org.apache.iotdb</</span><span style="color:#E06C75;">groupId</span><span style="color:#ABB2BF;">></span></span> |
| <span class="line"><span style="color:#ABB2BF;"> <</span><span style="color:#E06C75;">artifactId</span><span style="color:#ABB2BF;">>iotdb-server</</span><span style="color:#E06C75;">artifactId</span><span style="color:#ABB2BF;">></span></span> |
| <span class="line"><span style="color:#ABB2BF;"> <</span><span style="color:#E06C75;">version</span><span style="color:#ABB2BF;">>1.3.0-SNAPSHOT</</span><span style="color:#E06C75;">version</span><span style="color:#ABB2BF;">></span></span> |
| <span class="line"><span style="color:#ABB2BF;"> </</span><span style="color:#E06C75;">dependency</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></div><ol start="2"><li>创建一个实现类,实现接口 <code>org.apache.iotdb.db.mqtt.protocol.PayloadFormatter</code></li></ol><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;"><</span><span style="color:#E5C07B;">Message</span><span style="color:#ABB2BF;">></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<Meesage> ret</span></span> |
| <span class="line"><span style="color:#E5C07B;"> List</span><span style="color:#ABB2BF;"><</span><span style="color:#E5C07B;">Message</span><span style="color:#ABB2BF;">> </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;"><>();</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;"><</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;">"d"</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;">"s1"</span><span style="color:#ABB2BF;">, </span><span style="color:#98C379;">"s2"</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;">"4.0"</span><span style="color:#56B6C2;"> +</span><span style="color:#ABB2BF;"> i, </span><span style="color:#98C379;">"5.0"</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;"> "CustomizedJson"</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><ol start="3"><li>修改项目中的 <code>src/main/resources/META-INF/services/org.apache.iotdb.db.protocol.mqtt.PayloadFormatter</code> 文件:<br> 将示例中的文件内容清除,并将刚才的实现类的全名(包名.类名)写入文件中。注意,这个文件中只有一行。<br> 在本例中,文件内容为: <code>org.apache.iotdb.mqtt.server.CustomizedJsonPayloadFormatter</code></li><li>编译项目生成一个 jar 包: <code>mvn package -DskipTests</code></li></ol><p>在 IoTDB 服务端:</p><ol><li>创建 \${IOTDB_HOME}/ext/mqtt/ 文件夹, 将刚才的 jar 包放入此文件夹。</li><li>打开 MQTT 服务参数. (<code>enable_mqtt_service=true</code> in <code>conf/iotdb-system.properties</code>)</li><li>用刚才的实现类中的 getName() 方法的返回值 设置为 <code>conf/iotdb-system.properties</code> 中 <code>mqtt_payload_formatter</code> 的值,<br> , 在本例中,为 <code>CustomizedJson</code></li><li>启动 IoTDB</li><li>搞定</li></ol><p>More: MQTT 协议的消息不限于 json,你还可以用任意二进制。通过如下函数获得:<br><code>payload.forEachByte()</code> or <code>payload.array</code>。</p>`,30)]))}const y=l(p,[["render",r],["__file","Programming-MQTT.html.vue"]]),d=JSON.parse('{"path":"/zh/UserGuide/dev-1.3/API/Programming-MQTT.html","title":"MQTT 协议","lang":"zh-CN","frontmatter":{"description":"MQTT 协议 MQTT 是机器对机器(M2M)/“物联网”连接协议。 它被设计为一种非常轻量级的发布/订阅消息传递。 对于与需要较小代码占用和/或网络带宽非常宝贵的远程位置的连接很有用。 IoTDB 支持 MQTT v3.1(OASIS 标准)协议。 IoTDB 服务器包括内置的 MQTT 服务,该服务允许远程设备将消息直接发送到 IoTDB 服务器...","head":[["link",{"rel":"alternate","hreflang":"en-us","href":"https://iotdb.apache.org/UserGuide/dev-1.3/API/Programming-MQTT.html"}],["meta",{"property":"og:url","content":"https://iotdb.apache.org/zh/UserGuide/dev-1.3/API/Programming-MQTT.html"}],["meta",{"property":"og:site_name","content":"IoTDB Website"}],["meta",{"property":"og:title","content":"MQTT 协议"}],["meta",{"property":"og:description","content":"MQTT 协议 MQTT 是机器对机器(M2M)/“物联网”连接协议。 它被设计为一种非常轻量级的发布/订阅消息传递。 对于与需要较小代码占用和/或网络带宽非常宝贵的远程位置的连接很有用。 IoTDB 支持 MQTT v3.1(OASIS 标准)协议。 IoTDB 服务器包括内置的 MQTT 服务,该服务允许远程设备将消息直接发送到 IoTDB 服务器..."}],["meta",{"property":"og:type","content":"article"}],["meta",{"property":"og:locale","content":"zh-CN"}],["meta",{"property":"og:locale:alternate","content":"en-US"}],["meta",{"property":"og:updated_time","content":"2025-02-21T09:31:28.000Z"}],["meta",{"property":"article:modified_time","content":"2025-02-21T09:31:28.000Z"}],["script",{"type":"application/ld+json"},"{\\"@context\\":\\"https://schema.org\\",\\"@type\\":\\"Article\\",\\"headline\\":\\"MQTT 协议\\",\\"image\\":[\\"\\"],\\"dateModified\\":\\"2025-02-21T09:31:28.000Z\\",\\"author\\":[]}"]]},"headers":[{"level":2,"title":"内置 MQTT 服务","slug":"内置-mqtt-服务","link":"#内置-mqtt-服务","children":[]},{"level":2,"title":"MQTT 配置","slug":"mqtt-配置","link":"#mqtt-配置","children":[]},{"level":2,"title":"自定义 MQTT 消息格式","slug":"自定义-mqtt-消息格式","link":"#自定义-mqtt-消息格式","children":[]}],"git":{"createdTime":1688958677000,"updatedTime":1740130288000,"contributors":[{"name":"CritasWang","username":"CritasWang","email":"critas@outlook.com","commits":2,"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":2,"url":"https://github.com/W1y1r"}]},"readingTime":{"minutes":3.46,"words":1038},"filePathRelative":"zh/UserGuide/dev-1.3/API/Programming-MQTT.md","localizedDate":"2023年7月10日","autoDesc":true}');export{y as comp,d as data}; |