我有一个 MQTT 输入节点,可以启动 PostgreSQL 数据库的数据库操作(SELECT 和 INSERT)。数据库操作是通过node-contrib-postgres-multi 完成的。由于这些操作由功能节点分隔,因此我将保存部分消息flow.set
并flow.get
稍后检索。例如,
- 功能节点保存
flow.set
并生成SELECT
查询。 - 连接到 PostgreSQL 节点。
- 解析输出,使用
flow.get
和生成INSERT
语句。 - 连接到 PostgreSQL 节点。
我不禁想象flow.set
和flow.get
不同步。
目前,我正在模拟大约 20 台设备每秒发布数据,每次发布的时间戳增加 1 秒。绝对没有理由为什么生成的消息应该被复制。但是,数据库插入节点会因为 Node-RED 日志 ( .pm2/logs/red-out-0.log
) 中看到的唯一索引冲突而失败。
如果功能节点和数据库处理需要 2 秒,并且每秒接收 MQTT 消息 (QoS=0),MQTT 或 Node-RED 会缓冲它们吗?因此,每条收到的消息都被视为一个工作单元,直到它出错或“离开”流到数据库、HTTP 请求、MQTT 发布等。