gpt4 book ai didi

c# - Azure队列在DeleteMessage上抛出异常

转载 作者:行者123 更新时间:2023-11-30 22:39:44 24 4
gpt4 key购买 nike

我正在开发一个基于 Azure 的项目进行一些研究,并且在从 CloudQueue 实例删除消息时遇到了一些问题。代码相当简单,所以我有点困惑为什么当我尝试从队列中删除消息时会抛出异常。

以下是为队列生成数据的代码:

foreach (var cell in scheme(cells))
{
string id = Guid.NewGuid().ToString();
var blob = sweepItemContainer.GetBlobReference(id);
using (BlobStream stream = blob.OpenWrite())
{
BinaryFormatter bf = new BinaryFormatter();
bf.Serialize(stream, cell);
}
sweepItemQueue.AddMessage(new CloudQueueMessage(id), new TimeSpan(1, 0, 0));
}

以下是使用队列中的数据的代码:

var msgs = sweepItemsQueue.GetMessages(MsgAmt);
foreach (var msg in msgs)
{
_handleMessage(msg, sweepItemsContainer);
sweepItemsQueue.DeleteMessage(msg);
mergeItemsQueue.AddMessage(new CloudQueueMessage(msg.AsString), new TimeSpan(1, 0, 0));
}

我不明白为什么消息不能存在于队列中。除了其他消费者之外,没有其他任何东西会改变队列。但我确信他们无法收到相同的消息(只要时间跨度没有用完),那么这是怎么发生的?

最佳答案

您需要担心两个超时:消息在队列中存在的时间(您在 .AddMessage() 调用中指定的时间)以及设置的可见性超时当您调用 .GetMessages() 时(默认为 30 秒,有一个 overload 允许您指定超时)。当您调用 .GetMessages() 时> 在“visibilityTimeout”期间,所有返回的消息对其他使用者都是不可见的。此期限结束后,您尚未删除的所有消息将对所有其他使用者可见。

要检查这是否是问题所在,我会尝试使用 .GetMessages() 的重载,其最大可见性超时为 2 小时。如果这是问题所在,您可以将此值微调到更合理的数字。另一种选择是一次只检索一条消息。

关于c# - Azure队列在DeleteMessage上抛出异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5561173/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com