NetbaIoT

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

NetbaIoT 是 IoT 网关。设备通过 HTTP、MQTT 3.1.1、TCP 或 UDP 上报。网关完成认证与解码后,把 DeviceEvent 转发到你的 webhook 或 TCP sink。它不存储业务数据。

Protocol v1MQTT 3.1.1
MSRV 1.88.0AGPL-3.0

网关特点

  • 运行时没有 PostgreSQL 或其他数据库
  • HTTP 202 与 MQTT QoS1 表示 EventAccepted,不是业务持久化
  • 命令要求在线 MQTT 或 TCP 会话
  • 计划内关机可以 spool 必达工作;崩溃可能丢失内存中的事件

已实现

  • 无数据库网关:HTTP、内嵌 MQTT 3.1.1、分帧 TCP 与已认证 UDP
  • 在认证、编解码校验、路由与原子必达 sink 准入之后进入 EventAccepted
  • 确认型 webhook 与分帧 TCP/RPC 业务 sink;尽力而为 sink 可以丢弃
  • 命令仅发往在线会话;离线设备返回 DeviceOffline,不会排队
  • 官方 Rust 业务客户端,在应用处理之后显式 ACK 事件
  • 可选设备 SDK 使用标准 MQTT/HTTP;标准 MQTT 客户端仍为一等公民
  • 计划内关机将必达工作排入有界本地重启 spool,至少一次重放
  • 设备与管理 HTTP 分监听、带修订的控制快照,以及 CLI

不在当前范围

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

设备、业务与运维路径。

设备可使用标准 MQTT 3.1.1 或设备 HTTP。业务系统通过 netbaiot-client 消费确认事件。运维使用管理监听与 netbaiot CLI。

EventAccepted 不是业务持久化。

HTTP 202 与 MQTT QoS1 PUBACK 表示事件越过了有界 EventAccepted 边界:认证、编解码校验、路由,以及对每个确认必达 sink 的原子预留。它们不表示业务数据库已存储该事件。消费者必须按稳定 event_id 去重。

命令仅针对在线会话。

命令只会进入当前已连接的本地 MQTT 或 TCP 会话队列。离线设备返回类型化的 DeviceOffline。NetbaIoT 不存储离线命令。

计划内重启,不是崩溃持久。

计划内关机将必达工作排入带 fsync 与原子重命名的有界本地重启 spool。这是优雅重启安全的至少一次投递。SIGKILL、进程崩溃或断电可能丢失仍在内存中的已接受窗口。

常见问题

NetbaIoT 需要数据库吗?

不需要。运行时无数据库。持久业务数据由业务系统持有。NetbaIoT 唯一的持久机制是计划内优雅关机时使用的有界本地重启 spool。

HTTP 202 或 MQTT QoS1 PUBACK 表示什么?

表示 EventAccepted:认证、编解码校验、路由,以及对每个确认必达 sink 的原子预留。它们不表示业务数据库已存储该事件。消费者必须按 event_id 去重。

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

不会。命令只会进入当前已连接的本地 MQTT 或 TCP 会话。离线设备返回类型化的 DeviceOffline。