NetbaIoT

设备事件进来,
业务 sink 出去。

NetbaIoT 将 MQTT、分帧 TCP 与 UDP 上行数据认证、解码为 DeviceEvent,再路由到确认型 webhook 或 Business RPC sink。持久业务数据由业务系统持有。

Protocol v1MQTT 3.1.1 / 5.0
MSRV 1.88.0v0.6.6

网关特点

  • 运行时无数据库,也不在本地持久化状态
  • MQTT QoS1 PUBACK 表示 EventAccepted,不是业务持久化
  • 命令要求在线 MQTT 或 TCP 会话
  • 计划内关机在内存中排空必达工作;强制退出会丢失待处理事件

已实现

  • 纯内存网关:MQTT 3.1.1 与有限 5.0、分帧 TCP 和已认证 UDP
  • 在认证、编解码校验、路由与原子必达 sink 准入之后进入 EventAccepted
  • 确认型 webhook 与 Business RPC V4 sink;V5 事件窗口需显式启用
  • 命令仅发往在线会话;离线设备返回 DeviceOffline,不会排队
  • 官方 Rust 业务客户端,在应用处理之后显式 ACK 事件
  • 可选设备 SDK,并支持标准 MQTT 客户端
  • 计划内关机在内存中等待必达 sink ACK
  • 设备与管理分监听、独立 TLS 配置及 CLI

不在当前范围

  • 崩溃持久或恰好一次投递;SIGKILL 可能丢失仍在内存中的已接受窗口
  • 离线命令存储、持久 outbox 或运行时消息历史
  • 设备 HTTP 入口、MQTT-SN、WebSockets、共享订阅、桥接模式与 $SYS
  • 必需的 PostgreSQL 或其他数据库;持久业务数据由业务系统持有
  • 命令的客户端自动重试;DeviceOffline 是类型化的终止结果
  • 设备 SDK 中的离线 RAM 发布队列;断线发布会被拒绝

设备、业务与运维路径。

设备使用 MQTT、分帧 TCP 或已认证 UDP;业务系统通过确认型 webhook 或 Business RPC 接收事件;HTTP 仅用于管理。

EventAccepted 不是业务持久化。

设备回执表示校验、路由以及对每个必达 sink 的原子准入已经完成。必达 sink 显式 ACK。内存重试可能重复投递同一 event_id,消费者必须保证幂等。

命令仅针对在线会话。

命令发往已连接的本地 MQTT 或 TCP 会话。离线设备返回 DEVICE_OFFLINE,不存储离线命令。传输发送、设备接收与执行 ACK 是不同阶段。

纯内存关机与重启。

计划内关机先关闭入口,再在内存中等待必达 sink ACK。sink 故障时进程保持运行但不再就绪。强制退出会丢失待处理事件;每次重启的运行时与 MQTT 状态均为空。

常见问题

NetbaIoT 需要数据库吗?

不需要。网关没有数据库或运行时状态文件,持久数据由业务系统持有。

MQTT QoS1 PUBACK 表示什么?

表示 EventAccepted,不表示业务已持久化。必达 sink 重试可能重复投递 event_id,消费者需保证幂等。

会为离线设备存储命令吗?

不会。命令只发往当前已连接的本地 MQTT 或 TCP 会话;离线设备返回 DEVICE_OFFLINE。