2015-09-18 24 views
1

我正在MQ Light中確保交付。在MQ Light中重新發送行爲

我正在使用Node-RED和修改後的mqlight輸入節點。我加入下列選項的認購()調用:

qos: mqlight.QOS_AT_LEAST_ONCE, autoConfirm: false, ttl: (60 * 60 * 24 * 1000) 

這就要求我打電話delivery.message.confirmDelivery()確認到MQ光收到的消息。

下面的截圖是當mqlight_NodeREDClient的訂閱設置爲autoConfirm爲false時,收到一條消息,但沒有調用delivery.message.confirmDelivery()。這是爲了模擬Node-RED流程中發生的某種錯誤。

因爲我已經修改了Node-RED流程來執行confirmDelivery(),並且流程現在消耗的所有消息都被確認了,即使Node-RED在發佈時沒有運行。該消息由MQ Light保存,因爲目標上有一個TTL,並在我再次啓動Node-RED時立即到達。

但是,這個屏幕截圖中的消息已經發送過一次,但從未確認過,不會再發送。重新啓動Node-RED不會改變這一點,消息仍然未決。爲了讓MQ Light重新發送之前已發送但未被客戶確認的消息,需要滿足哪些標準? Screenshot from IBM MQ Light admin UI

回答

2

如果您沒有重新啓動NodeRED,我會說這是因爲MQ Light不會重新傳送到連接的客戶端,因爲它認爲客戶端仍在處理該消息。但是,既然你有它必須是別的東西。

我剛剛嘗試過相同的基本設置(沒有NodeRED),行爲與您所期望的一樣 - 當您重新連接接收客戶端MQ Light重新發送消息並且MQ Light UI將其打勾。

剩下的事情我能想到的是:

  1. 是否有可能在特定的消息被髮送你有QoS的0 訂閱?
  2. 您在發件人的郵件上設置了哪些TTL?
  3. 你在你的訂閱電話上設置了什麼目標TTL?

如果2.太低,該消息將已經從目的地無論訂戶或3.

值的QoS的過期如果3.過低和NodeRED被停止了足夠長的時間,整個目的地將會過期。

+0

幾個小時後,消息從UI中消失,不幸的是,我沒有在NodeRED端記錄任何東西,所以我無法分辨它是否真的通過了。現在我已經完成了一些更多的測試,並獲得了我所期望的行爲。我會做一些更多的實驗,看看我能否重現它。 –