将Azure Azure Queue BrokeredMessage标记为已成功处理?

时间:2014-08-12 16:03:00

标签: c# azure

我收到了工作角色的队列消息,但是当我尝试将BrokeredMessage标记为完成时。我得到以下错误:

Client.OnMessage((receivedMessage) =>
    {
        try
        {
            FileContainer fileInfoObj = receivedMessage.GetBody<FileContainer>();               
            //Message processing code               

            receivedMessage.Complete();                           

        }
        catch
        {
            receivedMessage.DeadLetter();
        }
    });
  

提供的锁无效。锁定已过期或消息   已从队列中删除。

我错过了什么吗?

1 个答案:

答案 0 :(得分:6)

根据Mike Z的评论,在创建队列以防止超时时设置LockDuration(默认值为1,最长可达5分钟)。

QueueDescription qd = new QueueDescription("MyQueue");
qd.LockDuration = ...

if (!namespaceManager.QueueExists("MyQueue"))
{
    namespaceManager.CreateQueue(qd);
}

此外,使用RenewLock可以防止它在漫长的过程中超时:

receivedMessage.RenewLock()

从这里: https://stackoverflow.com/a/15305150/188926