在node-红色的分割流上并发访问msg/payload



我正在处理一个节点红流,遇到了一些并发问题(希望不是真的)

我有一个输出msg的节点。负载,在一个连接上写入数据库。数据库插入节点是死端,因此来自第一个输出节点的另一个连接将转到覆盖msg的函数节点。HTTP响应所需的有效载荷。

我想知道在这种情况下的执行顺序,或者更确切地说,防止数据库访问修改后的msg。在功能节点之后运行时的有效负载。

显然,这似乎是工作-但我想知道如果这只是机会,或者是msg对象克隆之前每个函数,或在多个输出?

没有并发问题,因为Node-RED完全是单线程的(和所有NodeJS应用程序一样),所以在任何给定的时间只有一个分支流可以实际执行。

流程执行分支顺序是节点添加到流程中的顺序,因此对于假设节点按A、B、C、D、E顺序添加

A ----> B ---> D ---> E
    |
    --> C

消息将从A传递到B,再传递到D,再传递到E,然后传递到C(假设B、D、E都不阻塞io)

当多个节点连接到单个输出时,消息也会被克隆,您可以使用以下流程轻松地进行测试:

[{"id":"9fd37544.36664","type":"inject","z":"8b231c78.b8edc8","name":"","topic":"","payload":"foo","payloadType":"str","repeat":"","crontab":"","once":false,"x":269.5,"y":284.25,"wires":[["48eda9a0.b455e8","e1f3c665.9af04"]]},{"id":"48eda9a0.b455e8","type":"function","z":"8b231c78.b8edc8","name":"","func":"msg.payload = "bar";nreturn msg;","outputs":1,"noerr":0,"x":454.5,"y":283.75,"wires":[["5f27ffc7.a54ce"]]},{"id":"5f27ffc7.a54ce","type":"debug","z":"8b231c78.b8edc8","name":"","active":true,"console":"false","complete":"false","x":635.5,"y":284.5,"wires":[]},{"id":"e1f3c665.9af04","type":"debug","z":"8b231c78.b8edc8","name":"","active":true,"console":"false","complete":"false","x":475.5,"y":362.5,"wires":[]}]

这有一个流向2个调试输出的单一输入,第一个分支包括一个功能节点,该节点在输出之前修改有效负载。

最新更新