我有一个简单的视频编码工作者角色,它从队列中提取消息对视频进行编码,然后将视频上传到存储。一切似乎都正常,但偶尔在我完成编码和上传后删除消息时,我会收到“StorageClientException:指定的消息不存在”。尽管视频已处理,但我相信该消息会重新出现在队列中,因为它没有被正确删除。我将消息 visablilty 设置为 5 分钟,没有一个视频的处理时间超过 2 分钟。
- Worker 角色的另一个实例是否可能正在处理和删除消息?
- GetMessage() 不会阻止其他工作角色接收相同的消息吗?
- 我在队列设置中做错了吗?
- 什么可能导致删除时找不到此消息?
一些代码...
//onStart() queue setup
var queueStorage = _storageAccount.CreateCloudQueueClient();
_queue = queueStorage.GetQueueReference(QueueReference);
queueStorage.RetryPolicy = RetryPolicies.Retry(5, new TimeSpan(0, 5, 0));
_queue.CreateIfNotExist();
public override void Run()
{
while (true)
{
try
{
var msg = _queue.GetMessage(new TimeSpan(0, 5, 0));
if (msg != null)
{
EncodeIt(msg);
PostIt(msg);
_queue.DeleteMessage(msg);
}
else
{
Thread.Sleep(WaitTime);
}
}
catch (StorageClientException exception)
{
BlobTrace.Write(exception.ToString());
Thread.Sleep(WaitTime);
}
}
}