MQTT 中间件桥接 RFID 网关与 Odoo:事件驱动架构实战
MQTT 中间件桥接 RFID 网关与 Odoo:事件驱动架构实战
Odoo 集成

MQTT 中间件桥接 RFID 网关与 Odoo:事件驱动架构实战

为什么 HTTP 轮询不适合高频 RFID 事件,MQTT 的发布订阅模型如何解耦读写器与 ERP,QoS 级别选择与消息格式设计。

7 min· By SpidersRFID Editorial Team

HTTP 轮询的致命缺陷 传统 RFID 网关通过 HTTP 轮询向 Odoo 上报事件,存在三个问题:第一,高频轮询打爆 Odoo 的 worker 进程池;第二,网络抖动导致事件丢失;第三,无法实现双向通信(Odoo 无法主动通知网关)。MQTT 的发布订阅模型完美解决这三个问题。

MQTT 主题设计与消息格式 我们采用分层主题设计:rfid/{siteId}/{readerId}/event 用于读写器事件上报,rfid/{siteId}/command 用于 Odoo 向读写器下发指令。消息格式用 JSON:{epc, timestamp, rssi, readerId, antennaId, eventType}。关键设计是 eventType 字段区分 inventory(盘点)、entry(入库)、exit(出库)、alarm(防损),让订阅者按需消费。

QoS 级别选择 QoS 0(最多一次):适合高频实时盘点事件,允许少量丢失。QoS 1(至少一次):适合入库出库事件,确保不丢失但可能重复,订阅者需幂等处理。QoS 2(恰好一次):适合防损报警,确保不丢失不重复,但开销最大。我们的实践:盘点用 QoS 0,入库出库用 QoS 1,防损用 QoS 2。

Odoo 端的 MQTT 订阅器 在 Odoo 服务器部署一个独立的 Python 订阅器进程(paho-mqtt),订阅 rfid/+/+/event 主题,收到消息后通过 XML-RPC 或 OCA 的 connector 模块写入 Odoo。订阅器与 Odoo 之间用 Redis 队列缓冲,避免 Odoo 重启时丢失事件。单订阅器可处理 5,000 events/秒,满足大多数仓储场景。

我们使用 Cookie 来提升您的浏览体验、分析网站流量并个性化内容。点击“接受全部”即表示您同意我们使用所有 Cookie,您也可以选择“仅必要 Cookie”。详情请参阅我们的 隐私政策 以了解更多详情。