尽管 WebJobs SDK 处理程序已成功完成,但服务总线消息仍被放弃

Service Bus message abandoned despite WebJobs SDK handler completed successfully

我已经使用 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..
}

我不明白为什么消息 有时 被放弃,这当然会再次触发处理程序。我已经尝试调试(本地),在 ProcessMessage 完成之前设置断点,我可以看到它似乎成功完成。

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

我遗漏了什么以及如何解决问题?

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

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