2

我們正在從一個不穩定的消息隊列服務轉移到NodeJS中的Google Pub Sub。它似乎工作正常,但我們想包括錯誤處理。Google雲端發佈/子重試次數

我們希望限制特定消息的重試次數,比如在我們的測試環境中執行10次,在生產中執行100次。現在,如果一條消息失敗10次(測試中),而不是它坐在我們的隊列中,並繼續處理並失敗7天,我們希望將其移動到單獨的錯誤隊列併發送給我們一封電子郵件。

我們目前已將所有這些設置在我們之前的消息隊列中,但我們還沒有爲每條消息找到Google的Pub Sub重試計數屬性。有誰知道這是否存在?

我們在Google App Engine中使用任務隊列,他們擁有我們需要的所有東西,但Google的pub子似乎缺少很多。我們確實需要任何解決方案在Node中。

回答

0

在Python中,看到「NUM_RETRIES」上.execute參數():如果在node.js的存在同樣的事情,但我希望這點你在正確的方向

pubsub_client.projects().topics().publish(topic='projects/xxxx',body=body).execute(num_retries=0)

不知道。

+0

嗨Aerodyno,這讓我非常興奮。我也在Python文檔中看到它,但是當我們查看Github的Python和NodeJS時,它並未實現或記錄在案。 –

+2

num_retries屬性將影響發佈失敗時重試的次數,例如,出於某種原因,發佈者無法到達Cloud Pub/Sub。如果訂閱者不能處理和確認消息,它不會影響消息傳遞給訂閱者的次數。 –

5

雲端發佈/訂閱者對重試向訂閱者發送郵件的次數沒有限制。如果您的用戶從不在確認期限內確認該消息,它將被重新發送,直到消息7天后過期。

如果你想停止接收這些消息,那麼你需要在某些時候確認它們。如果你想防止不能被你的用戶處理「死亡的消息」,我提出以下建議:

  1. 跟蹤郵件失敗計數的數據庫中,由信息ID鍵。希望失敗不是很頻繁,所以這個數據庫不應該太大,只有在實際發生故障時纔會進行查詢。

  2. 當消息失敗時,查詢數據庫並查看之前發生過多少次失敗。遞增計數器,如果計數低於閾值,則不要確認消息。

  3. 如果消息的失敗次數超過閾值,請將消息發佈到單獨的「失敗消息」主題,發送電子郵件並確認消息。

  4. 如果有必要,有辦法從「失敗的消息」主題發佈消息回到您的主題,當首先導致消息失敗的問題得到解決。

您現在保存在單獨的主題(7天或直到你確認它),該消息不會被重新傳遞到你的主要話題的用戶信息。

+0

感謝卡邁勒的迴應。我認爲你的迴應是有效的,因爲我們將以不同的方式實施它。由於在數據庫中保留消息失敗計數似乎是無用信息,特別是如果實際消息消失,我們將在每個對象上存儲排隊或發佈日期。如果對象在主題中停留一天或更長時間,我們會將該消息添加到數據庫並將其從主題中確認/刪除。這使我們可以安靜地記錄日誌,限制重試次數,並讓消息無法查看並可用超過7天。 –

+0

我們認識到App Engine中的任務隊列將會很完美,但它們不會被Node支持。再次感謝您的迴應! –

+0

appengine中的任務隊列有一個REST API(儘管還有beta標籤)https://cloud.google.com/appengine/docs/python/taskqueue/rest/ – marcadian