[{"data":1,"prerenderedAt":243},["ShallowReactive",2],{"blog-post-zh-nanomq-newsletter-202210":3},{"post":4,"translationPath":-1},{"id":5,"title":6,"author":7,"body":8,"cover":222,"coverHeight":223,"coverWidth":224,"date":225,"description":226,"draft":227,"extension":228,"meta":229,"navigation":230,"path":231,"pinned":227,"seo":232,"sitemap":233,"stem":239,"tags":240,"__hash__":242},"blog_zh\u002Fzh\u002Fblog\u002Fnanomq-newsletter-202210.md","更强大的 MQTT over QUIC 桥接 & Azure 桥接",null,{"type":9,"value":10,"toc":208},"minimark",[11,29,34,37,41,44,55,58,62,65,74,85,88,91,97,101,104,108,111,115,124,127,134,137,140,146,149,155,163,172,175,178,184,187,190,193],[12,13,14,15,22,23,28],"p",{},"金秋十月，NanoMQ 继续保持稳步更新，最新的 0.13 版本将于近日正式发布。此版本的更新继续聚焦于桥接功能部分：为原来的 ",[16,17,21],"a",{"href":18,"rel":19},"https:\u002F\u002Fwww.emqx.com\u002Fzh\u002Fblog\u002Fthe-easiest-guide-to-getting-started-with-mqtt",[20],"nofollow","MQTT"," over ",[16,24,27],{"href":25,"rel":26},"https:\u002F\u002Fwww.emqx.com\u002Fzh\u002Fblog\u002Fquic-protocol-the-features-use-cases-and-impact-for-iot-iov",[20],"QUIC"," 桥接功能增加了多路桥接和更丰富的 QUIC 传输层配置参数，新增了内置的 Azure 桥接功能。另外新增了规则引擎消息重发布功能。",[30,31,33],"h2",{"id":32},"更完善的-mqtt-over-quic-桥接","更完善的 MQTT over QUIC 桥接",[12,35,36],{},"在 0.12 版本中推出的 MQTT over QUIC 桥接功能与 EMQX 5.0 配合使用得到了用户的热烈反响。在 0.13 版本中，我们为此功能进行了多项加强：",[38,39,40],"h3",{"id":40},"多路桥接",[12,42,43],{},"原先的 MQTT over QUIC 桥接功能只能支持连接一个服务端，这无法满足多路数据同步和传输的要求。与传统的基于 TCP 的 MQTT 连接相同，NanoMQ 也为基于 QUIC 的桥接功能的传输层做了优化，使其能够支持同时建立多个 MQTT over QUIC 连接。用户只需要和使用标准 MQTT 桥接功能一样，在配置文件中设置多个桥接目标配置(只摘录部分相关)：",[45,46,51],"pre",{"className":47,"code":49,"language":50},[48],"language-text","## Bridge via both TCP & QUIC ##\n## 以同时桥接到EMQX公共服务器和EMQX Cloud为例，配置桥接URL ##\nbridge.mqtt.emqx1.address=mqtt-quic:\u002F\u002Fbroker.emqx.io:14567\nbridge.mqtt.emqx2.address=mqtt-quic:\u002F\u002F54.75.171.11:14567\nbridge.mqtt.emqx3.address=mqtt-tcp:\u002F\u002Fbroker.emqx.io:1883\n\n......\n","text",[52,53,49],"code",{"__ignoreMap":54},"",[12,56,57],{},"多路桥接时，桥接数据是会同时发布给每个桥接对象的。NanoMQ 也支持同时进行基于 TCP 和 QUIC 的 MQTT 桥接。",[38,59,61],{"id":60},"quic-tcp-自动切换","QUIC & TCP 自动切换",[12,63,64],{},"MQTT over QUIC 能够帮助 IoT 应用极大改善弱网状态下的数据传输和地址迁移问题。但由于 QUIC 是基于 UDP 的，目前许多运营商仍然对 UDP 包有特殊的路由策略，这往往导致 QUIC 连接无法成功建立或一直被丢包。NanoMQ 也考虑到需要应对复杂的中间网络问题，特地推出了 QUIC 连接失败时自动切换至标准 MQTT over TCP 桥接的功能。",[12,66,67],{},[68,69],"img",{"alt":61,"src":70,"title":71,"width":72,"height":73},"\u002Fimages\u002Fblog\u002Fzh\u002Fnanomq-newsletter-202210\u002F01.webp","切换逻辑示意图",1520,435,[12,75,76,77,80,81,84],{},"使用时只需要在配置文件中设置新增的 ",[52,78,79],{},"bridge.mqtt.emqx.hybrid_bridging"," 选项为 ",[52,82,83],{},"true"," 来开启这一模式。注意目前并不能自动切换回 QUIC，后续再备用桥接目标功能中会支持这一需求。另外，因为此过程不计为连接通断，所以也不会发出桥接断开\u002F连接的上下线事件消息。",[38,86,87],{"id":87},"更丰富细致的配置选项",[12,89,90],{},"QUIC 作为新晋的网络标准，而且具有一定的设计自由度，所以往往需要针对不同的网络环境和场景修改其内部参数，为此 NanoMQ 暴露了一些常用的配置选项，以下是对它们的详细解释：",[45,92,95],{"className":93,"code":94,"language":50},[48],"## Newly added config params for QUIC ##\n##--------------------------------------------------------------------\n\n## Ping: QUIC 传输层发送Ping包的时间间隔\n##\n## Value: Duration\n## Default: 120 seconds\nbridge.mqtt.emqx.quic_keepalive=120\n\n## Idle Timeout: 保持QUIC连接的最大空闲时间，超过此设置时间长度的无活动连接将会被主动关闭。\n设置为0的话就不侦测无活动连接，若MQTT层keepalive设置的过大，这会造成僵尸连接的风险\n## Value: Duration\n## Default: 120 seconds\nbridge.mqtt.emqx.quic_idle_timeout=120\n\n## Disconnect Timeout: QUIC Stream 最大等待对端ACK的时间，超过此时间未收到回应的Stream\n会被认为无效并断开。\n## Value: Duration\n## Default: 20 seconds\nbridge.mqtt.emqx.quic_discon_timeout=20\n\n## Handshake Timeout: NanoMQ建立QUIC连接时的最大等待时间\n## Value: Duration\n## Default: 60 seconds\nbridge.mqtt.emqx.quic_handshake_timeout=60\n\n## Hybrid bridging: 混合桥接模式的开关，若开启会根据QUIC链接的建立情况自动退回 MQTT over\n TCP 桥接模式\n## Value: true\u002Ffalse\n## Default: false\nbridge.mqtt.emqx.hybrid_bridging=false\n##\n##--------------------------------------------------------------------\n",[52,96,94],{"__ignoreMap":54},[38,98,100],{"id":99},"quic-桥接支持-sqlite-数据缓存","QUIC 桥接支持 SQLite 数据缓存",[12,102,103],{},"NanoMQ 的桥接功能一大特色是桥接能够支持断网数据本地缓存，网络恢复自动重传。之前此项功能只对标准的 MQTT over TCP 有效。从 0.13 版本开始，当开启 SQLite 自动缓存功能时，此功能对 QUIC 桥接也同样有效。",[38,105,107],{"id":106},"自动化发布包含-quic-功能的安装包","自动化发布包含 QUIC 功能的安装包",[12,109,110],{},"在 0.12 版本，用户如果想要使用 NanoMQ 的 QUIC 相关功能，需要自行下载源码编译安装，过程较为复杂。为了方便用户使用，从 0.13 版本开始，NanoMQ 新增了自动化编译打包流程，每次都会自动编译出包含 QUIC 库在内的二进制包供用户直接安装使用。希望以此来降低项目中引入 QUIC 功能的上手门槛，用户只需简单安装 EMQX 5.0 + NanoMQ 并做相应配置即可。",[30,112,114],{"id":113},"azure-iot-hub-桥接","Azure IoT Hub 桥接",[12,116,117,118,123],{},"微软的 Azure 云服务有提供一个兼容部分 MQTT 协议的物联网服务：IoT Hub，详情可参阅微软官方文档（",[16,119,122],{"href":120,"rel":121},"https:\u002F\u002Flearn.microsoft.com\u002Fzh-cn\u002Fazure\u002Fiot-hub\u002Fiot-hub-mqtt-support",[20],"了解 Azure IoT 中心 MQTT 支持"," ）。NanoMQ 也内置支持了与其的桥接功能，具体使用方式如下：",[12,125,126],{},"Azure 强制要求必须使用 TLS 加密连接，且使用的 Topic 和认证用的用户名密码必须在其控制台预先创建设备来配置使用。",[12,128,129],{},[68,130],{"alt":114,"src":131,"width":132,"height":133},"\u002Fimages\u002Fblog\u002Fzh\u002Fnanomq-newsletter-202210\u002F02.webp",656,702,[12,135,136],{},"目前 NanoMQ 只支持使用对称秘钥加密和用户名+密码的方式认证链接 Azure IoT Hub。",[12,138,139],{},"配置后的页面如图：",[12,141,142],{},[68,143],{"alt":114,"src":144,"width":72,"height":145},"\u002Fimages\u002Fblog\u002Fzh\u002Fnanomq-newsletter-202210\u002F03.webp",461,[12,147,148],{},"之后修改桥接配置文件，其中需要特殊对待的配置有：",[45,150,153],{"className":151,"code":152,"language":50},[48],"bridge.mqtt.azure.address=tls+mqtt-tcp:\u002F\u002Fazure-iot-hub.net:8883 (使用Azure提供的主机名)\nbridge.mqtt.azure.clientid=device01 (使用在Azure控制台创建的设备名)\nbridge.mqtt.azuer.username= {iothubhostname}\u002F{device_id}\u002F?api-version=datetime\n(主机名+设备名+API版本日期拼接而成)\nbridge.mqtt.azuer.password=***** （ 使用SAS令牌，需要用Azure提供的工具本地生成 ）\nbridge.mqtt.azuer.tls.enable=true (必须使用TLS加密)\nbridge.mqtt.azuer.forwards=devices\u002F{device_id}\u002Fmessages\u002Fevents\u002F\nbridge.mqtt.azuer.subscriptions.1.topic=devices\u002F{device_id}\u002Fmessages\u002Fdevicebound\u002F#\n（订阅和发布的主题必须按照Azure规则配置）\n",[52,154,152],{"__ignoreMap":54},[12,156,157],{},[68,158],{"alt":159,"src":160,"title":159,"width":161,"height":162},"例：使用VS Code生成SAS令牌的方法","\u002Fimages\u002Fblog\u002Fzh\u002Fnanomq-newsletter-202210\u002F04.webp",820,968,[12,164,165,166,171],{},"如此启动 NanoMQ 就能够完成将本地标准 ",[16,167,170],{"href":168,"rel":169},"https:\u002F\u002Fwww.emqx.com\u002Fzh\u002Fblog\u002Fmqtt-client-tools",[20],"MQTT 客户端","的消息转换桥接至 Azure IoT Hub。",[30,173,174],{"id":174},"规则引擎消息重发布",[12,176,177],{},"规则引擎消息重发布功能在 v0.13 中测试完成正式发布。支持根据用户编写的 SQL 语句将本机 NanoMQ 里命中的消息修改后重新发布到目标 MQTT 服务的主题。简单示例如下：",[45,179,182],{"className":180,"code":181,"language":50},[48],"## 重新发布消息到此目标主机：\nrule.repub.1.address=mqtt-tcp:\u002F\u002Fbroker.emqx.io:1883\n## 重新发布到此目标主题：\nrule.repub.1.topic=topic\u002Frepub1\n## 根据如下规则过滤本机NanoMQ的消息：\nrule.event.publish.1.sql=\"SELECT topic, payload FROM \"abc\"\"\n",[52,183,181],{"__ignoreMap":54},[12,185,186],{},"如此就能将本地 NanoMQ 的”abc”主题中的消息和主题名一起组合成新的消息转发给云端公有的 EMQX MQTT 服务。",[12,188,189],{},"同时，这一版本开始规则引擎也能够支持使用 HTTP API 来对部分规则进行热更新。",[30,191,192],{"id":192},"即将到来",[12,194,195,196,200,201,200,204,207],{},"目前 NanoMQ 正计划将配置文件格式更新为更易读的 HOCON（",[197,198,199],"em",{},"Human-Optimized"," ",[197,202,203],{},"Configuration Object",[197,205,206],{},"Notation","）。关于配置文件使用体验，欢迎用户在 Github 提出宝贵建议。同时 NanoMQ 还将增加 Reload 命令和 HTTP API 来支持部分配置选项的热更新，并增加 ACL 支持等功能。",{"title":54,"searchDepth":209,"depth":209,"links":210},2,[211,219,220,221],{"id":32,"depth":209,"text":33,"children":212},[213,215,216,217,218],{"id":40,"depth":214,"text":40},3,{"id":60,"depth":214,"text":61},{"id":87,"depth":214,"text":87},{"id":99,"depth":214,"text":100},{"id":106,"depth":214,"text":107},{"id":113,"depth":209,"text":114},{"id":174,"depth":209,"text":174},{"id":192,"depth":209,"text":192},"\u002Fimages\u002Fblog\u002Fzh\u002Fnanomq-newsletter-202210\u002Fcover.webp",400,700,"2022-11-08","十月，NanoMQ 保持稳步更新，最新的 0.13 版本将于近日发布：此版本聚焦于桥接功能，并新增了规则引擎消息重发布功能。",false,"md",{},true,"\u002Fzh\u002Fblog\u002Fnanomq-newsletter-202210",{"title":6,"description":226},{"loc":231,"images":234,"lastmod":225},[235,236,237,238],{"loc":70},{"loc":131},{"loc":144},{"loc":160},"zh\u002Fblog\u002Fnanomq-newsletter-202210",[241],"NanoMQ Newsletter","ltR4YKWiLmKa4YOxRT_ImCP-r8P_UIpRi7h06WxXg8w",1794542897172]