Node-RED上的同步消耗& MQTT

时间:2017-04-14 20:25:15

标签: asynchronous mqtt node-red

我正在使用Node-RED和MQTT编写业务流程系统。 我决定将事件获取与治疗分开。主要目标是快速推送队列中的事件并尽快对其进行实时处理。

系统运行如下:

  1. 我在HTTP Rest API上收到一个事件,
  2. 在MQTT主题上推送此事件,
  3. 在另一个流程中,听取并阅读MQTT主题中的事件,
  4. 从此活动中启动多个操作/流程(最多5/10秒)。
  5. 但是我遇到了一个问题:如果我收到太多2个相关事件,第二个事件可能会改变第一个事件的处理。为了解决这个问题,我想同步我的事件消耗/处理以保持它们的有序性。

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

3 个答案:

答案 0 :(得分:1)

不,您无法关闭MQTT客户端。

并且没有没有同步的概念,主要是因为所有NodeJS应用程序都是纯粹的单线程,因此有两件事情实际上不能同时发生,任务只有在达到IO界限时才能正常生成。

我不确定你是否真的通过HTTP获得任何接收它,然后通过MQTT重新消费它。

如果要对传入的事件进行排队,可以使用延迟节点将输入速率限制为您确定处理可以管理的内容。速率限制选项有2种模式,一种是丢弃消息,另一种是排队消息。

答案 1 :(得分:0)

在MQTT客户机的输出上放置一个简单的消息Q,并通过将其发送为trigger = true来使其释放下一条消息(或者也许能够使其以设定的速率释放消息)。我还在看这些。 https://flows.nodered.org/node/node-red-contrib-simple-message-queue

答案 2 :(得分:0)

这是我解决问题的建议:https://flows.nodered.org/flow/3003f194750b0dec19502e31ca234847

  

与基于MQTT的异步工作程序同步要求/ REST REST API

     

该示例实现了一个REST API端点,一个用于向该端点发出请求的注入节点以及两个异步执行其工作的工作者。

它仍在进行中,因此请期待更改。随时与我联系,并与Node-RED一起讨论有关编排的其他解决方案。