[英]How to guarantee CosmosDB data is up to date with ServiceBus, not overridden by Deadletter messages
我對使用a的實現有疑問:
我有一個服務總線觸發器,它可以觸發,處理傳入數據,然后將其存儲在帶有Upsert的CosmosDB中。 如果一條消息處理失敗,我會將其存儲在DeadLetter隊列(DLQ)中,該隊列將在以后的請求下發送。 這可能會導致以下問題:我將重新發送來自DLQ的(較舊的)消息,該消息將覆蓋數據庫中的“較新”對象。 今天,我使用表來存儲時間戳,以確保何時更新對象。 更好的方法是調查存儲文檔中的時間戳,而不是傳入ServiceBus消息中的Enqueued time屬性,但是這不適用於非持久數據庫。
有沒有“更清潔”的方法來解決此問題?
以下是一些有助於您考慮解決方案的方面:
使用服務總線事務來確保在完成消息之前完成所有相關工作。 如果CosmosDB upsert失敗,請放棄該消息以重試。
確保您的設計是冪等的 。 您可以使用排隊的時間和/或相關性ID來管理順序,以幫助實現冪等。 我會將其作為數組添加到CosmosDB文檔中,並避免使用其他數據存儲來減少可能的故障點。
另外,還要確保為用例選擇了正確的CosmosDB一致性級別 ,並且如果要處理大量數據,那么您將需要考慮此功能的重要性,並可能在分區策略中使用相關ID。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.