Как обрабатывать исключения из веб-заданий в понимании приложения? - PullRequest
0 голосов
/ 23 апреля 2019

Когда исключение выдается из веб-задания, оно завершается без регистрации сведений о приложении.Заметил, что очистка журналов до понимания приложения занимает несколько минут, поэтому здесь мы пропускаем исключения.Как с этим справиться?

Кроме того, есть ли способ автоматически переместить сообщение, попавшее в исключение, в очередь отравления, без ручной вставки этого сообщения в очередь отравления?

Я использую последние стабильные версии 3.x для 2 пакетов NuGet: Microsoft.Azure.WebJobs и Microsoft.Azure.WebJobs.Extensions

Создал хост, который реализовал IHost, как показано ниже:

        var builder = new HostBuilder()
            .UseEnvironment("Development")
            .ConfigureWebJobs(b =>
            {
                ...
            })
            .ConfigureLogging((context, b) =>
            {
                string appInsightsKey = context.Configuration["APPINSIGHTS_INSTRUMENTATIONKEY"];
                if (!string.IsNullOrEmpty(appInsightsKey))
                {
                    b.AddApplicationInsights(o => o.InstrumentationKey = appInsightsKey);
                    appInsights.TrackEvent("Application Insights is starting!!");
                }
            })
            .ConfigureServices(services =>
            {
              ….
            })
            .UseConsoleLifetime();
        var host = builder.Build();
        using (host)
        {
            host.RunAsync().Wait();
        }

и Function.cs

   public static async void ProcessQueueMessageAsync([QueueTrigger("queue")] Message message, int dequeueCount, IBinder binder, ILogger logger)
    {
        switch (message.Name)
        {
            case blah:
                ...break;
            default:
                logger.LogError("Invalid Message object in the queue.", message);
                logger.LogWarning("Current dequeue count: " + dequeueCount);
                throw new InvalidOperationException("Simulated Failure");
        }
    }

Мои вопросы здесь:

1) Когда задан случай по умолчанию, webjob немедленно завершается, а регистраторы неполучить представление о приложении даже после ожидания и повторного запуска веб-задания.Поскольку на понимание идей приложения уходит несколько минут, и веб-работа прекращается, я теряю журналы ошибок.Как с этим справиться?

2) Из примеров веб-заданий здесь: https://github.com/Azure/azure-webjobs-sdk-samples/blob/master/BasicSamples/QueueOperations/Functions.cs они используют JobHost host = new JobHost ();и если происходит сбой функции FailAlways, она автоматически повторяется 5 раз и помещает сообщение в очередь отравления.Но этого не происходит в моем коде.Это из-за разных хостов?или я должен добавить еще конфигурации?

1 Ответ

0 голосов
/ 24 апреля 2019

После проверки исходного кода Application Insights SDK стало очевидно, что для получения исключения в Application Insights необходимо передать объект исключения в вызов LogError.

log.Error(ex, "my error message") - will result in Application Insight Exception

log.Error("my error message") - will result in Application Insight Trace.

isЕсть ли способ автоматически переместить сообщение, которое попало в исключение, в очередь отравления, не вставляя вручную это сообщение в очередь отравления?

Вы можете установить config.Queues.MaxDequeueCount = 1; в веб-задании.Число попыток обработки сообщения перед его перемещением в очередь-ядро.

А где в коде должна быть добавлена ​​конфигурация MaxDequeueCount?

Вы могли быустановить свойство в JobHostConfiguration в program.cs

...