尽管WebJobs SDK处理程序成功完成,但Service Bus消息已被放弃

Ant*_*ton 3 c# azureservicebus azure-webjobs 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..
}
Run Code Online (Sandbox Code Playgroud)

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

WebJobs SDK的Sevice Bus部分负责消息锁更新,因此就我所理解的而言,这应该不是问题.

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

mat*_*ewc 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);
Run Code Online (Sandbox Code Playgroud)

您还可以通过自定义MessageProcessor自定义这些值.有关这些新功能的更多详细信息,请参阅此处发行说明.

  • 在进一步调查中,虽然ServiceBus文档很差,但看起来OnMessageAsync确实会进行自动续订.尝试配置**OnMessageOptions.AutoRenewTimeout**值并为您的方案增加它.请参阅有关该设置的ServiceBus文档[此处](http://msdn.microsoft.com/en-us/library/microsoft.servicebus.messaging.onmessageoptions.autorenewtimeout.aspx).配置它的能力最近才被添加到WebJobsSDK中.请参见ServiceBusConfiguration.OnMessageOptions. (2认同)