C# 如何通过ServiceBus保证CosmosDB数据是最新的,而不是被死信消息覆盖
我有一个关于使用a的实施的问题:C# 如何通过ServiceBus保证CosmosDB数据是最新的,而不是被死信消息覆盖,c#,azure,azure-sql-database,azure-table-storage,azureservicebus,C#,Azure,Azure Sql Database,Azure Table Storage,Azureservicebus,我有一个关于使用a的实施的问题: 宇宙数据库 服务总线+DLQ 我有一个服务总线触发器,它触发、处理传入的数据,然后用Upsert将其存储在CosmosDB中。如果一条消息在处理过程中失败,我会将其存储在死信队列(DLQ)中,该队列将在稍后的请求时发送。这可能会导致以下问题:我将从DLQ重新发送一条(旧得多的)消息,这将覆盖数据库中的一个“较新”对象。今天,我使用一个表来存储时间戳,以确保对象最新更新的时间。更好的方法是调查存储文档的时间戳与传入ServiceBus消息的排队时间属性,但是这
- 宇宙数据库
- 服务总线+DLQ
有什么“更干净”的方法来解决这个问题吗?以下是一些有助于思考您的解决方案的方面:
- 在完成信息之前,请使用a确保已完成所有相关工作。如果CosmosDB upsert失败,请放弃该消息以重试
- 确保你的设计是正确的。您可以使用排队时间和/或管理顺序来帮助实现幂等性。我会在CosmosDB文档中将其作为数组添加,并避免使用另一个数据存储来减少可能的故障点
- 还要确保您已经为您的用例选择了正确的,如果您正在处理大量的数据,那么您需要考虑这个特性有多重要,并且可能在分区策略中使用您的相关ID
- 在完成信息之前,请使用a确保已完成所有相关工作。如果CosmosDB upsert失败,请放弃该消息以重试
- 确保你的设计是正确的。您可以使用排队时间和/或管理顺序来帮助实现幂等性。我会在CosmosDB文档中将其作为数组添加,并避免使用另一个数据存储来减少可能的故障点
- 还要确保您已经为您的用例选择了正确的,如果您正在处理大量的数据,那么您需要考虑这个特性有多重要,并且可能在分区策略中使用您的相关ID
- 以下是一些有助于思考您的解决方案的方面: