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

时间:2020-08-24 07:05:49

标签: azure azure-storage azure-storage-queues

我从Azure存储队列中收到重复的消息。我确定我的函数仅在将消息记录到同一函数的数据库中时执行一次。单击该按钮后,我看到消息在存储队列中排队,并在第二秒内将消息从队列中删除(因此,又不像有2条相同的消息在队列中一样)。

对此有何想法?预先感谢!

PS-请注意,这不是Azure Service Bus,我可以在其中将RequiresDuplicateDetection属性设置为True来解决此问题。

2 个答案:

答案 0 :(得分:2)

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

没有一种机制可以查询存储队列并找出具有相同内容的消息是否已经存在或曾经存在过。您可以尝试使用某些存储表来实现自己的逻辑,但这并不可靠-因为进入表的操作可能会成功,然后进入队列的操作可能会失败-现在,表中的数据可能会变差。 / p>

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

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

enter image description here

有关更多详细信息,您可以参考此article

答案 1 :(得分:1)

您可以将消息发送到Queue,并且当从Queue中读取消息时,可以将其删除,因此不再重复,但这将在Azure Functions的服务器端完成。从客户端来看,您将面临太多的并发问题。如果您不想删除,那么使用出队属性也是正确的方法。

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