如何配置WebJob ServiceBusTrigger重试策略

时间:2017-11-28 15:25:52

标签: c# azure-webjobs azureservicebus azure-servicebus-topics retrypolicy

编辑:我将接受与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
    }
}

1 个答案:

答案 0 :(得分:1)

  

如何为这些消息设置重试延迟?

Webjobs不支持延迟重试的概念。您只能使用ServiceBusConfiguration控制一些内容,但这些内容不会重试source code

您可以使用NServiceBusMassTransit等框架来延迟重试。有一个如何使用NServiceBus with WebJobs的示例,您可以在本地运行它以查看延迟重试的工作方式。