我有一个通过服务总线触发的 Azure Function v1 主题。如果发生任何错误,我会将 BrokeredMessage 放入死信。它似乎有效,但之后我在函数的日志流中看到以下内容:
2019-11-19T10:49:31.382 [Error] MessageReceiver error (Action=Complete) : Microsoft.ServiceBus.Messaging.MessageLockLostException: The lock supplied is invalid. Either the lock expired, or the message has already been removed from the queue.
以下是我如何将 BrokeredMessage 放入死信:
myBrokeredMessage.DeadLetter(deadLetterReason, exception.Message);
// after this I have tried following but doesn't work:
// 1. do nothing
// 2. myBrokeredMessage.Complete();
// 3. myBrokeredMessage.Abandon();
我的函数运行良好。但在运行并执行上述代码后,该错误似乎会记录流。它似乎在做我想做的事情(将 BrokeredMessage 放入死信队列),但该错误看起来不太好,我想修复它。我猜想我没有正确处理某种锁。
我应该怎么做才能修复该错误?
最佳答案
What should I do to fix that error?
这与其说是错误,不如说是警告。函数的设计方式是默认情况下函数完成消息或死信消息。如果您控制传入消息发生的情况,Functions 运行时不会这样做,并且仍然尝试应用完成逻辑,因为从它的角度来看,用户代码没有抛出异常,因此传入消息应被视为已成功处理并完成。
与 Functions 2.x您可以打开一个主机设置以允许手动完成并禁用自动完成。这在 v1.0 中不可用,因此您必须忽略记录的错误。或者,升级到 2.x。
关于c# - 在 Azure Function v1 中将 BrokeredMessage 移至死信后出现 MessageLockLostException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58934842/