Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/278.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何通过ServiceBus保证CosmosDB数据是最新的,而不是被死信消息覆盖_C#_Azure_Azure Sql Database_Azure Table Storage_Azureservicebus - Fatal编程技术网

C# 如何通过ServiceBus保证CosmosDB数据是最新的,而不是被死信消息覆盖

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消息的排队时间属性,但是这

我有一个关于使用a的实施的问题:

  • 宇宙数据库
  • 服务总线+DLQ
我有一个服务总线触发器,它触发、处理传入的数据,然后用Upsert将其存储在CosmosDB中。如果一条消息在处理过程中失败,我会将其存储在死信队列(DLQ)中,该队列将在稍后的请求时发送。这可能会导致以下问题:我将从DLQ重新发送一条(旧得多的)消息,这将覆盖数据库中的一个“较新”对象。今天,我使用一个表来存储时间戳,以确保对象最新更新的时间。更好的方法是调查存储文档的时间戳与传入ServiceBus消息的排队时间属性,但是这不适用于非持久性数据库


有什么“更干净”的方法来解决这个问题吗?

以下是一些有助于思考您的解决方案的方面:

  • 在完成信息之前,请使用a确保已完成所有相关工作。如果CosmosDB upsert失败,请放弃该消息以重试

  • 确保你的设计是正确的。您可以使用排队时间和/或管理顺序来帮助实现幂等性。我会在CosmosDB文档中将其作为数组添加,并避免使用另一个数据存储来减少可能的故障点

  • 还要确保您已经为您的用例选择了正确的,如果您正在处理大量的数据,那么您需要考虑这个特性有多重要,并且可能在分区策略中使用您的相关ID


    • 以下是一些有助于思考您的解决方案的方面:

      • 在完成信息之前,请使用a确保已完成所有相关工作。如果CosmosDB upsert失败,请放弃该消息以重试

      • 确保你的设计是正确的。您可以使用排队时间和/或管理顺序来帮助实现幂等性。我会在CosmosDB文档中将其作为数组添加,并避免使用另一个数据存储来减少可能的故障点

      • 还要确保您已经为您的用例选择了正确的,如果您正在处理大量的数据,那么您需要考虑这个特性有多重要,并且可能在分区策略中使用您的相关ID