我已经使用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部分负责更新消息锁定,因此,就我所理解的情况而言,这不应成为问题。
我错过了什么以及如何排除故障?
答案 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。