0

编辑:我将接受与 Azure 配置相关的更改作为此问题的答案。


我正在尝试设置重试策略,以防止在第 3 方服务暂时不可用时立即重试消息。

目前,该作业会立即重试多次,并且由于 3rd 方服务的临时中断而每次都失败。

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

我有以下主要代码:

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
    }
}
4

1 回答 1

1

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

Webjobs 不支持延迟重试的概念。你只能控制一些东西使用ServiceBusConfiguration,但那些不是重试查看源代码

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

于 2017-11-28T19:14:20.387 回答