尽管 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。
我已经使用 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。