如何使用HostBuilder for WebJob?

问题描述 投票:6回答:1

随着.Net 2.0引入了非常有用的控制台应用程序HostBuilder,就像我们使用WebHostBuilder for Web Application一样。

我现在关注的是如何使用带有QueueTrigger的WebJob实现HostBuilder?

到现在为止,我正在使用JobActivator:

        var startup = new Startup();
        var serviceProvider = startup.ConfigureServices(new ServiceCollection());
        startup.Configure(serviceProvider);

        var jobHostConfiguration = new JobHostConfiguration()
        {
            JobActivator = new JobActivator(serviceProvider),
        };

        var host = new JobHost(jobHostConfiguration);
        host.RunAndBlock();

有关完整示例,请参阅以下代码:https://github.com/ranouf/DotNetCore-CosmosDbTrigger-WebJob/tree/master/CosmosDbTriggerWebJob.App

是否有人已经将HostBuilder用于带有QueueTrigger的WebJob?可能吗?

谢谢

asp.net-core .net-core asp.net-core-2.0 azure-webjobs
1个回答
6
投票

就在那时,我已经想到了这一点。首先确保已升级软件包以使用相应WebJob软件包的最新v3版本。

我发现我需要以下内容:

  1. Microsoft.Azure.WebJobs
  2. Microsoft.Azure.WebJobs.Core
  3. Microsoft.Azure.WebJobs.Extensions.ServiceBus

然后,您可以在Main方法中使用构建器作为Console项目,如下所示:

 static async Task Main()
    {
        var builder = new HostBuilder();
        builder.ConfigureAppConfiguration(cb =>
        {
            cb.AddJsonFile("appsettings.json");
        });
        builder.ConfigureWebJobs(b =>
        {
            b.AddServiceBus();
        });
        await builder.RunConsoleAsync();
    }

请注意,我已启用语言功能7.1以支持异步主方法。如果您愿意,可以使用“等待()”。然后我将appsettings.json文件添加到我的项目中,如下所示:

{
   "ConnectionStrings": {
      "AzureWebJobsServiceBus": "Endpoint=sb://..."
    }
}

(编辑:并确保文件始终复制到输出文件夹)最后,最重要的是我修改了触发器功能以包含Connection的名称,如下所示:

    public static void ProcessQueueMessage([ServiceBusTrigger("[Your Queue Name]", Connection = "AzureWebJobsServiceBus")] string message, TextWriter log)
    {
        log.WriteLine(message);
    }

即使Connection的名称是默认名称,我仍然似乎必须在我的函数属性中定义它。我也尝试了“价值观”方法,但我无法做到这一点。然后我开始从服务总线接收消息。

© www.soinside.com 2019 - 2024. All rights reserved.