【问题标题】:Service Bus message abandoned despite WebJobs SDK handler completed successfully尽管 WebJobs SDK 处理程序已成功完成,但服务总线消息仍被放弃
【发布时间】:2016-01-28 06:37:17
【问题描述】:

我使用 WebJobs SDK 实现了一个长时间运行的进程作为 WebJob。 等待长时间运行的过程,因为我想要结果。

public async Task ProcessMessage([ServiceBusTrigger("queuename")] MyMessage message)
{
    await Run(message.SomeProperty); // takes several minutes
    // I want to do something with the result here later..
}

我无法弄清楚为什么消息 sometimes 被放弃了,这当然会再次触发处理程序。我尝试调试(本地),在ProcessMessage 完成之前设置断点,我可以看到它似乎成功完成。

WebJobs SDK 的服务总线部分负责更新消息锁,因此据我了解,这应该不是问题。

我缺少什么以及如何排除故障?

【问题讨论】:

    标签: c# azure-webjobs azureservicebus azure-webjobssdk


    【解决方案1】:

    [编辑之前不正确的回复]

    WebJobs SDK 依赖于 MessageReceiver.OnMessageAsync 完成的自动锁定更新。这些续订由OnMessageOptions.AutoRenewTimeout 设置管理,可以在 WebJobs SDK 的 v1.1.0 版本中像这样进行配置:

    JobHostConfiguration config = new JobHostConfiguration();
    
    ServiceBusConfiguration sbConfig = new ServiceBusConfiguration();
    sbConfig.OnMessageOptions = new OnMessageOptions
    {
      MaxConcurrentCalls = 16,
      AutoRenewTimeout = TimeSpan.FromMinutes(10)
    };
    
    config.UseServiceBus(sbConfig);
    

    您还可以通过自定义 MessageProcessor 自定义这些值。有关这些新功能的更多详细信息,请参阅release notes here

    【讨论】:

    • 经过进一步调查,虽然 ServiceBus 文档很差,但似乎 OnMessageAsync 确实会自动续订。尝试配置 OnMessageOptions.AutoRenewTimeout 值并针对您的方案增加它。请参阅有关该设置 here 的 ServiceBus 文档。配置此功能的功能最近才添加到 WebJobsSDK。请参阅 ServiceBusConfiguration.OnMessageOptions。
    • 看起来这是要走的路。 Google 员工的完整软件包名称:Microsoft.Azure.WebJobs.ServiceBus 1.1.0-beta1(即预发布通道)。感谢您的更新!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-13
    • 2019-04-24
    • 1970-01-01
    • 2020-07-20
    • 2020-01-31
    • 1970-01-01
    相关资源
    最近更新 更多