如何在扩展的 .NET Core WindowsService 中使用 v3.x 的 WebJobs SDK Microsoft.Extensions.Hosting.BackgroundService,那还需要调用
Host.Run
?
有一个 github 问题需要示例解决方案。
有关“如何使用 Azure WebJobs SDK 进行事件驱动的后台处理”的一些代码,存在于 v3 WebJobs SDK 的文档中
运行 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();