[{"data":1,"prerenderedAt":310},["ShallowReactive",2],{"blog-post-zh-nanomq-newsletter-202305":3},{"post":4,"translationPath":-1},{"id":5,"title":6,"author":7,"body":8,"cover":294,"coverHeight":295,"coverWidth":296,"date":297,"description":298,"draft":299,"extension":300,"meta":301,"navigation":302,"path":303,"pinned":299,"seo":304,"sitemap":305,"stem":306,"tags":307,"__hash__":309},"blog_zh\u002Fzh\u002Fblog\u002Fnanomq-newsletter-202305.md","QUIC 桥接支持 MQTT 5.0｜NanoMQ Newsletter 202305",null,{"type":9,"value":10,"toc":281},"minimark",[11,21,25,30,46,57,60,88,91,94,106,109,112,115,135,138,141,144,200,204,211,237,244,248,251,275,278],[12,13,14,15,20],"p",{},"五月初夏，",[16,17,19],"a",{"href":18},"\u002Fzh","NanoMQ"," 项目在发布了 0.18 版本后，聚焦于用户需求的开发和社区发现的漏洞问题的测试修复。即将于近期发布的 0.19 Beta 版本中将推出动态桥接功能和对桥接主题进行热更新的 HTTP API。同时还有新的 Prometheus 数据监控的 HTTP Exporter API，和针对桥接和命令行工具的若干小型优化。",[22,23,24],"h2",{"id":24},"桥接功能更新和修复",[26,27,29],"h3",{"id":28},"nanomq-支持-mqtt5-over-quic-桥接","NanoMQ 支持 MQTT5 over QUIC 桥接",[12,31,32,33,39,40,45],{},"继上一个版本 NanoSDK 增加了 MQTT5 over QUIC 的支持后，本月 NanoMQ 的桥接功能也引入了这一版本来支持 MQTT5 over QUIC 桥接，以期让用户可以同时利用 ",[16,34,38],{"href":35,"rel":36},"https:\u002F\u002Fwww.emqx.com\u002Fzh\u002Fblog\u002Fquic-protocol-the-features-use-cases-and-impact-for-iot-iov",[37],"nofollow","QUIC 协议","和 ",[16,41,44],{"href":42,"rel":43},"https:\u002F\u002Fwww.emqx.com\u002Fzh\u002Fblog\u002Fthe-easiest-guide-to-getting-started-with-mqtt",[37],"MQTT"," 5.0 的优势。在 0.17 版本中 NanoMQ 的桥接功能已经支持了 MQTT 5.0 协议的 Connect 和 Subscribe 特性配置，而 MQTT5 over QUIC 桥接的使用方式也相同，示例配置如下：",[47,48,53],"pre",{"className":49,"code":51,"language":52},[50],"language-text","bridges.mqtt {\n    nodes = [\n        {\n            name = emqx\n            connector {\n                server = \"mqtt-quic:\u002F\u002Fxxx.xxx.xxx.xxx:14567\"\n                proto_ver = 5\n                ...\n                conn_properties = {\n                    session_expiry_interval = 10000\n                }\n            }\n            will {\n                topic = \"will_topic\"\n                ...\n                properties = {\n                    message_expiry_interval = 5000\n                }\n\n            }\n            forwards = [\"topic1\u002F#\", \"topic2\u002F#\"]\n            subscription = [\n                {\n                    topic = \"command\"\n                    qos = 1\n                }\n            ]\n                        # # Properties of subscribe for MQTT V5\n            sub_properties {\n                identifier = 1\n            }\n            quic_0rtt=true\n            quic_qos_priority=true\n            quic_multi_stream = false\n            hybrid_bridging = false\n        }\n    ]\n}\n","text",[54,55,51],"code",{"__ignoreMap":56},"",[12,58,59],{},"其中比较重要且对功能影响较大的 MQTT 5.0 over QUIC 桥接配置选项有：",[61,62,63,70,76,82],"ul",{},[64,65,66,69],"li",{},[54,67,68],{},"quic_0rtt"," ：开启或关闭 QUIC 的 0RTT 快速重连，影响连接的安全性和对运营商网络的适配性。",[64,71,72,75],{},[54,73,74],{},"quic_qos_priority"," ： NanoMQ 特有的本地桥接 MQ 功能，可以对 QoS 大于 0 的数据包优先传输，更好地利用弱网带宽。",[64,77,78,81],{},[54,79,80],{},"quic_multi_stream"," ： 和 EMQX 5.0 配合使用的 QUIC 多流桥接功能，用以对付单流时的网络拥塞情况。开启后会显著增加传输速率和带宽占用。",[64,83,84,87],{},[54,85,86],{},"hybrid_bridging"," ：开启后桥接连接会在断开时自动在 TCP\u002FQUIC 两种传输层间切换以尝试重连，可以用来应对复杂网络环境下对 QUIC 协议的封锁和丢包问题。",[26,89,90],{"id":90},"其他修复",[12,92,93],{},"同时 NanoMQ 还对桥接功能做了如下修复：",[61,95,96,103],{},[64,97,98,99,102],{},"修复混合桥接模式：混合桥接模式即通过配置 ",[54,100,101],{},"hybrid_bridging=true","开启的功能。经测试和用户反馈发现，在 0.14-0.18.2 的版本中使用此功能可能会造成服务停止，请不要开启。目前已经修复并且改进了切换速度和与MQTT 5.0 协议兼容，将在六月发布的 0.19 Beta 版本中一并推出。",[64,104,105],{},"修复 AWS IoT Core 桥接：AWS IoT Core 桥接功能在 0.9.0 版本中由于配置文件的重构更新导致无法开启，这一问题在 0.19 Beta 中也已经修复。 但由于 AWS C SDK 的 OpenSSL 版本和 NanoMQ 使用的 MsQUIC 库中的 OpenSSL 版本不兼容，所以导致两种功能无法同时开启。NanoMQ 将在后续的版本中对两个功能使用的 OpenSSL 进行静态链接处理来规避这一问题，但目前还需要用户避免同时使用二者。",[26,107,108],{"id":108},"动态桥接功能前瞻",[12,110,111],{},"自从 NanoMQ 发布以来，已经收到多个用户请求支持动态桥接功能。目前桥接功能还只能静态开启和关闭，若要更新还需要修改配置后重启 broker。在 0.19 Beta 版本中动态桥接功能将会以测试的形式放出，会和混合桥接功能（hybrid bridging）相同作为一个桥接旁路存在，所以 2 种特殊桥接模式不能同时开启。",[12,113,114],{},"要使用动态桥接功能，用户可以通过新增的 HTTP API 来修改和触发。即将推出两个新的桥接热更新 HTTP API：",[61,116,117,126],{},[64,118,119,120],{},"更新桥接配置并触发连接重连即刻生效，通过 {$node} 参数来指定更新的目标桥接连接：",[47,121,124],{"className":122,"code":123,"language":52},[50],"curl -i --basic -u admin:public -X PUT 'http:\u002F\u002Flocalhost:8081\u002Fapi\u002Fv4\u002Fbridges\u002F$node' --data\n'{\n    \"data\": {\n        ...... (更新的配置内容)\n    }\n}'\n",[54,125,123],{"__ignoreMap":56},[64,127,128,129],{},"更新桥接主题并触发 NanoMQ 向桥接目标发布 Sub\u002FUnSub 请求，通过 {$node} 参数来指定更新的目标桥接连接。",[47,130,133],{"className":131,"code":132,"language":52},[50],"curl --location 'http:\u002F\u002F127.0.0.1:8081\u002Fapi\u002Fv4\u002Fbridges\u002Fsub(unsub)\u002Femqx' --data \\\n'{\n    \"data\": {\n        \"subscription\": [\n            {\n                \"topic\": \"new\u002Ftopic\",\n                \"qos\": 2\n            }\n        ]\n        ... 新的桥接主题相关配置\n    }\n}'\n",[54,134,132],{"__ignoreMap":56},[12,136,137],{},"目前此功能仍处在开发阶段，关于此功能的设计和使用方式，欢迎到论坛或 GitHub 页面提建议。",[22,139,140],{"id":140},"命令行工具更新",[12,142,143],{},"考虑到广大用户的使用习惯，nanomq_cli 命令行修改了交互方式，以配合已有的用户习惯：",[61,145,146,161,171,182],{},[64,147,148,149,152,153,156,157,160],{},"nanomq_cli pub\u002Fsub 的目标地址指定方式不再是 ",[54,150,151],{},"--url"," ，而是将地址和端口分开，用 ",[54,154,155],{},"--host"," 指定地址， ",[54,158,159],{},"--port"," 来指定端口。",[64,162,163,164,166,167,170],{},"由于不再有 ",[54,165,151],{}," 选项，所以 nanomq_cli pub\u002Fsub 客户端工具新增了 ",[54,168,169],{},"--quic"," 来供用户指定 QUIC 作为传输层。",[64,172,173,174,177,178,181],{},"修正了 nanomq_cli pub\u002Fsub 的指定证书选项命名错误： ",[54,175,176],{},"--cacert"," 改成 ",[54,179,180],{},"--cafile"," 。",[64,183,184,185,188,189,192,193,188,196,199],{},"调换了 ",[54,186,187],{},"--identifier"," 和 ",[54,190,191],{},"--interval"," 的简写使用法，现在分别是 ",[54,194,195],{},"-i",[54,197,198],{},"-I","。",[22,201,203],{"id":202},"nanomq-支持新的安装源","NanoMQ 支持新的安装源",[12,205,206,207,210],{},"感谢社区用户的贡献，NanoMQ 现在已经上架 ArchLinux 的 AUR （Arch User Repository）。ArchLinux 用户可以通过 ",[54,208,209],{},"yay"," 命令一键安装。且支持 NanoMQ 的不同裁剪版本。",[61,212,213,219,225,231],{},[64,214,215,218],{},[54,216,217],{},"yay -S nanomq"," 安装 NanoMQ 基础版本。",[64,220,221,224],{},[54,222,223],{},"yay -S nanomq-msquic"," 安装 NanoMQ QUIC 桥接版本。",[64,226,227,230],{},[54,228,229],{},"yay -S nanomq-sqlite"," 安装 NanoMQ SQLite 缓存版本。",[64,232,233,236],{},[54,234,235],{},"yay -S nanomq-full"," 安装 NanoMQ 全功能版本。",[12,238,239,240,243],{},"此外，NanoMQ 也已经被 NixOS （一个独立的 GNU\u002FLinux 发行版） 整合，NixOS 用户可以使用 ",[54,241,242],{},"nixpkgs"," 安装 NanoMQ。",[22,245,247],{"id":246},"bug-修复","Bug 修复",[12,249,250],{},"在上个月的版本发布通知中，我们特地感谢了社区用户提交的安全漏洞报告。这一版本中所有提交的漏洞以及相关的潜在问题都已经得到修复。具体的修复内容如下：",[61,252,253,256,259,262,265,268],{},[64,254,255],{},"修复了未知 SQL 语句导致规则引擎崩溃的一个段错误问题。",[64,257,258],{},"修改了 HOCON 配置文件解析器的一个数字单位读取错误问题。",[64,260,261],{},"移除了 DDS Proxy 功能的编译安装环境问题（感谢 NixOS 的帮助）。",[64,263,264],{},"修复了一个消息结构体定义导致的在大端机器上的兼容性问题 （感谢 GitHub 用户 nnllyy）。",[64,266,267],{},"修复了一个由非法 Retain 消息包触发的狭窄的数据竞争窗口问题。",[64,269,270,271,274],{},"更新了 ",[54,272,273],{},"l8w8jwt","依赖来修复了 HTTP Server JWT 认证。",[22,276,277],{"id":277},"即将到来",[12,279,280],{},"应多位用户的呼声，NanoMQ 在下一个版本中会增加动态桥接功能，用户能够通过 HTTP REST API 来修改桥接配置并 Reload 或重连桥接来生效，方便更灵活的数据路由管理。另外，在之前 Demo Day 中展示的 NFTP + MQTT 文件传输功能也计划作为标准功能内置到 nanomq_cli 中。",{"title":56,"searchDepth":282,"depth":282,"links":283},2,[284,290,291,292,293],{"id":24,"depth":282,"text":24,"children":285},[286,288,289],{"id":28,"depth":287,"text":29},3,{"id":90,"depth":287,"text":90},{"id":108,"depth":287,"text":108},{"id":140,"depth":282,"text":140},{"id":202,"depth":282,"text":203},{"id":246,"depth":282,"text":247},{"id":277,"depth":282,"text":277},"\u002Fimages\u002Fblog\u002Fzh\u002Fnanomq-newsletter-202305\u002Fcover.webp",684,1520,"2023-06-01","五月初夏，NanoMQ 项目在发布了 0.18 版本后，聚焦于用户需求的开发和社区发现的漏洞问题的测试修复。",false,"md",{},true,"\u002Fzh\u002Fblog\u002Fnanomq-newsletter-202305",{"title":6,"description":298},{"loc":303,"lastmod":297},"zh\u002Fblog\u002Fnanomq-newsletter-202305",[308],"NanoMQ Newsletter","4US2k36oEm1amiPRo8nAfFQH1_lNxDhfjH5vtgyiaW8",1794542897037]