c# - 在 Azure Function v1 中将 BrokeredMessage 移至死信后出现 MessageLockLostException

标签 c# .net azure-functions azureservicebus azure-servicebus-topics

我有一个通过服务总线触发的 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/

相关文章:

c# - 从现有实例创建 IList<T> 的新实例并修改它

.net - 当 .net 程序由于未捕获的异常而退出时,操作系统级别会发生什么情况?

java - JNI4Net C# 到 Java

c# - 在Azure持久功能事件中使用ILogger?

c# - 检索物理核心处理器的数量

c# - 如何告诉 convert.todatetime 输入的格式为 dd-mm-yyyy

.net - Powershell v3 Invoke-WebRequest HTTPS 错误

azure - 在本地开发 Azure 函数

c# - 将所有子域添加到 CORS azure 功能

c# - 当我在 if 子句中放置一个关闭的 div 标签时,Razor 会提示