2017-04-14 106 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