将Azure队列BrokeredMessage标记为已处理成功

本文关键字:处理 成功 记为 Azure 队列 BrokeredMessage | 更新日期: 2023-09-27 18:17:35

我在worker角色中收到队列消息,但是当我尝试将BrokeredMessage标记为完成时。我得到下面的错误:

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

提供的锁无效。要么是锁过期,要么是消息已从队列中删除。

我错过了什么吗?

将Azure队列BrokeredMessage标记为已处理成功

根据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