从 Azure 存储队列获取重复消息

Getting duplicate messages from Azure Storage Queue

我收到来自 Azure 存储队列的重复消息。我确信我的函数只执行一次,因为我在同一个函数中将消息记录到数据库中。单击按钮后,我看到消息在存储队列中排队,并在一秒钟内出队(所以,这又不像有 2 条相同的消息入队)。

对此有什么想法吗?提前致谢!

P.S - 请注意,它不是 Azure 服务总线,我可以在其中将 属性 RequiresDuplicateDetection 设置为 True 以解决此问题。

目前,azure 存储队列不支持重复检测。

没有任何机制可以查询存储队列并查明具有相同内容的消息是否已经存在或之前存在。您可以尝试使用一些存储 table 来实现您自己的逻辑,但这并不可靠 - 因为进入 table 可能会成功,然后进入队列可能会失败 - 现在你可能会table.

中有错误数据

您的代码应始终假设它可以检索包含已处理的相同数据的消息。这是因为当正在处理消息的工作人员崩溃或花费太长时间时,消息可能会返回到队列中。

由于存储队列不支持重复检测,您可以voice反馈。

更多细节,你可以参考这个article

您可以将消息发送到 Queue,当它从 Queue 中读取时,您可以将其删除,这样就不会再有重复,但这将在 server-side 上从 Azure Functions 完成。从 client-side 开始,您将面临太多并发问题。如果您不想删除,那么 dequeue 属性 用法也是正确的方法。

https://docs.microsoft.com/en-us/azure/storage/queues/storage-dotnet-how-to-use-queues?tabs=dotnet#de-queue-the-next-message