C# 是否将Azure队列代理消息标记为已成功处理?
我以工作者角色接收队列消息,但当我尝试将C# 是否将Azure队列代理消息标记为已成功处理?,c#,azure,C#,Azure,我以工作者角色接收队列消息,但当我尝试将BrokeredMessage标记为完成时。我得到以下错误: Client.OnMessage((receivedMessage) => { try { FileContainer fileInfoObj = receivedMessage.GetBody<FileContainer>(); //Message proce
BrokeredMessage
标记为完成时。我得到以下错误:
Client.OnMessage((receivedMessage) =>
{
try
{
FileContainer fileInfoObj = receivedMessage.GetBody<FileContainer>();
//Message processing code
receivedMessage.Complete();
}
catch
{
receivedMessage.DeadLetter();
}
});
Client.OnMessage((receivedMessage)=>
{
尝试
{
FileContainer fileInfoObj=receivedMessage.GetBody();
//消息处理代码
receivedMessage.Complete();
}
抓住
{
receivedMessage.DeadLetter();
}
});
提供的锁无效。锁已过期,或者消息已过期
已从队列中删除
我遗漏了什么吗?根据Mike Z的评论,在创建队列时设置(默认值为1,最长可达5分钟),以防止超时
QueueDescription qd = new QueueDescription("MyQueue");
qd.LockDuration = ...
if (!namespaceManager.QueueExists("MyQueue"))
{
namespaceManager.CreateQueue(qd);
}
此外,用于防止在长时间过程中超时:
receivedMessage.RenewLock()
从这里开始:
信息处理代码需要多长时间?锁有一个过期时间。默认超时为1分钟。使用QueueDescription.LockDuration
更改它。