【问题标题】:Azure Functions: Servicebustrigger -> BrokeredMessage been disposedAzure Functions:Servicebustrigger -> BrokeredMessage 已处置
【发布时间】:2018-03-14 12:24:18
【问题描述】:

我写了很多具有类似功能的 Webjobs,其中类似的代码工作得很好。但是使用 Azure Functions 有时会出错。

[FunctionName("Alert")]
public static async void Alert([ServiceBusTrigger(Topic.Alert, Subscription.Sql, AccessRights.Listen, Connection = "servicebusconnectionstring")] BrokeredMessage message, TraceWriter log)
{
    using (var stream = message.GetBody<Stream>())
    {
        using (var memoryStream = new MemoryStream())
        {
            stream.CopyTo(memoryStream);
            var json = Encoding.UTF8.GetString(memoryStream.ToArray());

            try
            {
                throw new Exception("Test-Exception");
            }
            catch (Exception e)
            {
                EventLogger.LoggException("Function.Sql.Alert", e, new Dictionary<string, string>() { { "Messsage", json } });
                if (message.DeliveryCount >= 5)
                {
                    EventLogger.LoggEvent("DeadLetterQueue", new Dictionary<string, string>() { { "Function", "Function.Sql.Alert" }, { "Messsage", json } });
                    await QueueService.SendAsync(Queue.Deadletter, JsonConvert.DeserializeObject<CloudAlert>(json));
                    await message.CompleteAsync();
                }
                else
                    await message.AbandonAsync();
            }
        }
    }
    await message.CompleteAsync();
}

问题是当我调用 message.AbandonAsync() 或 message.CompleteAsync 时,它有时会抛出

System.ObjectDisposedException: BrokeredMessage 已被释放。

如果我最后没有调用 message.CompleteAsync() ,则消息仍被标记为已完成。我可以忍受这一点,但我也希望能够放弃该消息,并且该功能也不总是有效。

有人做过类似的事情并有解决方案吗?使用 .NET Standard 2.0 和以下用于 ServiceBus 的 NuGet 包:Microsoft.Azure.ServiceBus v2.0.0

【问题讨论】:

    标签: azure azure-functions servicebus objectdisposedexception


    【解决方案1】:

    您不应手动完成或放弃消息。 Azure Functions 运行时将根据您的函数执行的失败(异常)成功与否。

    因此,如果您想放弃,请抛出异常。它将再次自动重试,直至达到最大传递计数限制。

    【讨论】:

    • 感谢您清除它!我aassumed它是类似的东西,但找不到信息。 WebJobs 的工作方式不同或至少有(6 个月前)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-14
    • 1970-01-01
    相关资源
    最近更新 更多