gpt4 book ai didi

asp.net-core - 如何重启 Hangfire 服务器,或停止它并启动一个新服务器,以更改它正在处理的队列?

转载 作者:行者123 更新时间:2023-12-05 02:44:04 25 4
gpt4 key购买 nike

在我的 asp.net 5 应用程序中,我使用 Hangfire 仅处理某些队列,基于服务器应照顾的租户。因此,在应用程序启动时,我会查找哪些队列并相应地启动 Hangfire 服务器。

    public void ConfigureServices(IServiceCollection services)
{
// ... do stuff

services.AddHangfire(config => config
.SetDataCompatibilityLevel(CompatibilityLevel.Version_170)
.UseSimpleAssemblyNameTypeSerializer()
.UseSqlServerStorage(hangfireConnectionString, new SqlServerStorageOptions
{
QueuePollInterval = new TimeSpan(0, 0, 0, 0, 500)
})
);

string[] queueNames = GetQueueNamesForThisServerToProcess();

services.AddHangfireServer(options =>
{
options.Queues = queueNames;
});

// ... do more stuff
}

稍后我想更改此服务器正在处理的队列。我认为我需要停止这个 hangfire 服务器并启动另一个……但是 a) 我如何获得对这个 hangfire 的引用,以及 b) 我应该如何正确启动一个新的,给定在 aspnet core 中启动 Hangfire 服务器的建议方法是使用 services.AddHangfireServer()

最佳答案

停止正在运行的服务器

BackgroundProcessingServer注入(inject)后可以在任意controller中访问

_server.SendStop();
await _server.WaitForShutdownAsync(new System.Threading.CancellationToken());
_server.Dispose();

启动新服务器

可以触发 AddHangfireServer 访问注入(inject)的 IApplicationBuilder

  _applicationBuilder.UseHangfireServer(new BackgroundJobServerOptions
{
WorkerCount = 1,
Queues = new[] { "customqueuename" },
ServerName = "Custom server 2",
});

启动.cs

  services.AddSingleton<IBackgroundProcessingServer, BackgroundProcessingServer>();
services.AddSingleton<IApplicationBuilder, ApplicationBuilder>();

here for a complete POC .

使用 JobStorage.Current.GetConnection().RemoveTimedOutServers(new TimeSpan(0, 0, 15)); 更新/hangfire/servers

关于asp.net-core - 如何重启 Hangfire 服务器,或停止它并启动一个新服务器,以更改它正在处理的队列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66582783/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com