在 WindowsService 中托管 WebJobs SDK .NetCore。当两者都必须调用 Host.Run 时如何启动服务

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

如何在扩展的 .NET Core WindowsService 中使用 v3.x 的 WebJobs SDK Microsoft.Extensions.Hosting.BackgroundService,那还需要调用

Host.Run

有一个 github 问题需要示例解决方案

有关“如何使用 Azure WebJobs SDK 进行事件驱动的后台处理”的一些代码,存在于 v3 WebJobs SDK 的文档中

.net-core azure-storage azure-webjobs
1个回答
0
投票

运行 Azure WebJobs 后台服务 Host 来订阅 Azure 存储事件,例如QueueTrigger,并将该服务作为后台服务托管在 Windows 服务中(Windows 服务的新 .net 核心方式):

  const string ServiceName = "InsolDataSync";
  private const string AZUREWEBJOBSSTORAGEQUEUEBATCHSIZE = "AzureWebJobsStorageQueueBatchSize";
  var configuration = new ConfigurationBuilder()
    .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
#if DEBUG                
    .AddJsonFile("appsettings.Development.json", optional: true, reloadOnChange: true)
#endif
    .Add(new EncryptedConfigurationSource(applicationNameWithoutExtension))
    .Build();

  var _batchsize = configuration[AZUREWEBJOBSSTORAGEQUEUEBATCHSIZE];
  var batchsize = 1;
  if (!string.IsNullOrEmpty(_batchsize) && Int32.TryParse(_batchsize, out batchsize))
    if (batchsize > 5) batchsize = 5; //upper limit is 5;

  IHostBuilder functionsBuilder = Host.CreateDefaultBuilder(args)
    .ConfigureWebJobs(b =>
    {
      b.AddAzureStorageCoreServices();
      b.AddAzureStorageBlobs(bloboptions => {
        bloboptions.MaxDegreeOfParallelism = 1;
    });
    b.AddAzureStorageQueues(options =>
    {
      options.BatchSize = batchsize;
    });
  })
  .ConfigureServices(svcs =>
    {
      svcs.AddSingleton(configuration);
      svcs.AddSingleton<INameResolver>(new QueueNameResolver());//allows for custom naming of QueueTrigger names
      svcs.AddSingleton<JokeService>();
      svcs.AddWindowsService(options =>
      {
        options.ServiceName = ServiceName;
      });
      svcs.AddHostedService<MyWindowsBackgroundService>();
      LoggerProviderOptions.RegisterProviderOptions<EventLogSettings, EventLogLoggerProvider>(svcs);
  })
  .UseWindowsService(options =>
    {
      options.ServiceName = ServiceName;
    });
    var functionsHost = functionsBuilder.Build();
    //perform pre-startup activities, e.g. on first use run an installer
    functionsHost.Run();
© www.soinside.com 2019 - 2024. All rights reserved.