2017-04-14 107 views
0

我正在使用Node-RED和MQTT编排系统。 我决定将治疗事件从事件中分离出来。主要目标是快速推送队列中的事件并尽可能快地实时处理它们。Node-RED和MQTT上的同步消耗

该系统的运作是这样的:

  1. 我收到一个HTTP REST API的事件,
  2. 推动的MQTT主题此事件,
  3. 上的另一个流程,倾听和阅读活动MQTT主题
  4. 从此事件启动多个操作/进程(最多5/10秒)。

但是我面临一个问题:如果我收到太快的2个相关事件,第二个事件可能会改变第一个事件的处理。为了解决这个问题,我想同步我的事件消费/处理,以便让他们订购。

MQTT的QoS 2的消息将在顺序传递。我如何简单地在Node-RED中实现同步范例?是否有可能避免MQTT客户端在处理事件时进行监听?

回答

1

不,你不能把MQTT客户端关闭。

而且没有没有同步的概念,主要是因为应用程序是纯粹的单线程所有这样的NodeJS两件事情实际上并不能一蹴而就,任务只是产生通常当他们到达必然的东西IO。

我不知道你实际上得到任何通过HTTP接受它,然后通过MQTT重新消费它。

如果要排队进入的事件了,你可以使用延迟节点进行速率限制输入的东西你肯定的处理可以管理。速率限制选项有两种模式,一种是丢弃消息,另一种是排队消息。

+0

我使用MQTT排队接收元件(通过HTTP)作为弹性机构。 RATE限制器不可用,因为它基于时间消耗并且不会避免并行处理。 – Spawnrider