Просмотр ошибок в QueueTrigger - Azure WebJobs SDK 3.0 - PullRequest
0 голосов
/ 26 февраля 2019

Я нахожусь в процессе обновления веб-задания Azure с помощью триггера очереди с 2.2 до 3.0.4.Я добавил пакет хранения Nuget с расширением хранилища, изменил код конфигурации и запустил приложение.

Он может извлекать из очереди, но я не вижу ни ошибок, ни локальных точек прерывания в моемфункция запуска очереди.Я знаю, что сообщения отбираются, потому что это единственное приложение, которое указывает на мой эмулятор локального хранилища (с уникальным именем очереди), и через несколько секунд после добавления все сообщения направляются в очередь с ошибками.Я никогда не вижу ошибки в консоли.

Я использую Autofac, поскольку реализация 2.2 работала с ним нормально - я включил пакет Autofac.Extensions.DependencyInjection.

Вот мой основнойв program.cs - точки останова внутри, но не в QueueProcessor:

static void Main()
    {
        Console.ForegroundColor = ConsoleColor.Yellow;
        Console.Write("Initializing DI container...");

        var containerBuilder = new ContainerBuilder();
        RegisterTypes(containerBuilder);
        containerBuilder.RegisterType<BulkUpdateRequestProcessor>();
        containerBuilder.Build();

        Console.Write("done.");
        Console.WriteLine();
        Console.Write("Initializing host configuration...");
        var hostBuilder = new HostBuilder();
        hostBuilder.ConfigureWebJobs(b =>
        {
            b.AddAzureStorageCoreServices()
            .AddAzureStorage(options =>
             {
                 options.BatchSize = 1;
                 options.MaxDequeueCount = 1;
                 options.MaxPollingInterval = TimeSpan.FromSeconds(5f);
             });

            b.AddTimers();

            b.AddExecutionContextBinding();
            b.AddDashboardLogging();


        })
        .ConfigureServices((x) => x.AddAutofac())
        .UseConsoleLifetime();

        Console.Write("done.");
        Console.WriteLine();
        Console.ForegroundColor = ConsoleColor.Green;

        var host = hostBuilder.Build();
        using (host)
        {
            host.Run();
        }

    }

Процессор очереди:

public class BulkUpdateRequestProcessor
{
    private readonly IRevisionService _revisionService;

    private readonly ILogger _logger;
    private readonly IClock _clock;

    public BulkUpdateRequestProcessor(IRevisionService revisionService, ILogger logger, IClock clock)
    {
        _revisionService = revisionService;
        _logger = logger;
        _clock = clock ?? throw new ArgumentNullException(nameof(clock));
    }

    public async Task ProcessNewJobRequest([QueueTrigger(BulkUpdateConstant.BULK_UPDATE_JOB_QUEUE)] Guid jobId, TextWriter log)
    {
        _logger.Info(string.Format("New item appeared in a queue: '{0}'", jobId));

        try
        {
            await ProcessJobRequest(jobId);
        }
        catch (Exception ex)
        {
            _logger.Log(NLog.LogLevel.Error, ex);
            await TryNotifyJobFailed(jobId, ex.Message);
            throw;
        }

        _logger.Info(string.Format("Request '{0}' processed", jobId));
    }
}

1 Ответ

0 голосов
/ 26 февраля 2019

Оказывается, что класс, содержащий привязки веб-задания, требует конструктора с нулевым параметром.Я узнал об этом случайно.Было бы хорошо, если бы произошла ошибка сборки.-1 Microsoft

...