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

时间:2015-10-28 13:07:19

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

我已经使用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的Sevice Bus部分负责更新消息锁定,因此,就我所理解的情况而言,这不应成为问题。

我错过了什么以及如何排除故障?

1 个答案:

答案 0 :(得分:5)

[以前编辑错误回复]

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