【问题标题】:Seeing errors in QueueTrigger - Azure WebJobs SDK 3.0在 QueueTrigger 中查看错误 - Azure WebJobs SDK 3.0
【发布时间】:2019-02-26 21:39:28
【问题描述】:

我正在将带有队列触发器的 Azure Web 作业从 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));
    }
}

【问题讨论】:

    标签: autofac azure-webjobssdk .net-4.7.1


    【解决方案1】:

    事实证明,包含 Web Job 绑定的类需要一个零参数构造函数。我偶然发现了这一点。如果发生构建错误会很好。 -1 微软

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-12-12
      • 1970-01-01
      • 1970-01-01
      • 2019-08-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多