编辑:我将接受与Azure配置相关的更改作为此问题的答案。
我正在尝试设置重试策略,以防止在第三方服务暂时不可用时立即重试邮件。
目前,由于第三方服务暂时中断,该作业会立即多次重试并且每次都失败。
如何为这些消息设置重试延迟?
我有以下代码用于Main:
class Program
{
static void Main()
{
var config = new JobHostConfiguration();
if (config.IsDevelopment)
config.UseDevelopmentSettings();
config.UseCore();
config.UseServiceBus(new ServiceBusConfiguration()
{
ConnectionString = Configuration.GetAppSetting("Microsoft.ServiceBus.ConnectionString"),
MessageOptions = new OnMessageOptions()
{
}
});
var host = new JobHost(config);
LogManager.GetCurrentClassLogger().Information("F1.Birst.Automation web job starting.");
// The following code ensures that the WebJob will be running continuously
host.RunAndBlock();
}
}
我有一个ErrorMonitor设置,可以正确记录错误:
public class ExceptionHandler
{
private static readonly ILogger Log = LogManager.GetCurrentClassLogger();
public void Handle([ErrorTrigger] TraceFilter message, TextWriter log)
{
foreach (var exception in message.GetEvents())
Log.Error(exception.Exception.InnerException, exception.Message);
}
}
我的消息处理程序如下所示:
public class ChurchCodeChangedEventHandler : ChurchSpaceHandler
{
private static readonly ILogger Log = LogManager.GetCurrentClassLogger();
public void Handle([ServiceBusTrigger(nameof(ChurchCodeChangedEvent), "F1.Birst.Automation.ChurchCodeChangedEvent")] ChurchCodeChangedEvent message, TextWriter log)
{
Log.Information(LogTemplates.ChurchCodeChanged, message.ChurchId);
// snip
}
}
答案 0 :(得分:1)
如何为这些消息设置重试延迟?
Webjobs不支持延迟重试的概念。您只能使用ServiceBusConfiguration
控制一些内容,但这些内容不会重试source code。
您可以使用NServiceBus或MassTransit等框架来延迟重试。有一个如何使用NServiceBus with WebJobs的示例,您可以在本地运行它以查看延迟重试的工作方式。