簡體   English   中英

如何保證CosmosDB數據與ServiceBus是最新的,不會被Deadletter消息覆蓋

[英]How to guarantee CosmosDB data is up to date with ServiceBus, not overridden by Deadletter messages

我對使用a的實現有疑問:

  • 宇宙數據庫
  • 服務總線+ DLQ

我有一個服務總線觸發器,它可以觸發,處理傳入數據,然后將其存儲在帶有Upsert的CosmosDB中。 如果一條消息處理失敗,我會將其存儲在DeadLetter隊列(DLQ)中,該隊列將在以后的請求下發送。 這可能會導致以下問題:我將重新發送來自DLQ的(較舊的)消息,該消息將覆蓋數據庫中的“較新”對象。 今天,我使用表來存儲時間戳,以確保何時更新對象。 更好的方法是調查存儲文檔中的時間戳,而不是傳入ServiceBus消息中的Enqueued time屬性,但是這不適用於非持久數據庫。

有沒有“更清潔”的方法來解決此問題?

以下是一些有助於您考慮解決方案的方面:

  • 使用服務總線事務來確保在完成消息之前完成所有相關工作。 如果CosmosDB upsert失敗,請放棄該消息以重試。

  • 確保您的設計是冪等的 您可以使用排隊的時間和/或相關性ID來管理順序,以幫助實現冪等。 我會將其作為數組添加到CosmosDB文檔中,並避免使用其他數據存儲來減少可能的故障點。

  • 另外,還要確保為用例選擇了正確的CosmosDB一致性級別 ,並且如果要處理大量數據,那么您將需要考慮此功能的重要性,並可能在分區策略中使用相關ID。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM