首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在所有Azure可用实例上调度Hangfire作业?

如何在所有Azure可用实例上调度Hangfire作业?
EN

Stack Overflow用户
提问于 2017-12-01 22:19:18
回答 2查看 733关注 0票数 1

我有一个在Azure上运行的Web Api应用程序。我每天凌晨2:00时运行一个调度程序作业,它创建了许多hangfire作业。

目前,Web Api应用程序只有一个可用实例,该实例被配置为基于CPU指标进行横向扩展。这些正在运行的hangfire作业将CPU百分比增加到限制,并创建api应用程序的新可用实例。

不幸的是,在我看来,给定的hangfire作业是在创建它的实例上运行的。如何将Hangfire配置为在所有可用实例上调度作业?

EN

回答 2

Stack Overflow用户

发布于 2017-12-04 17:51:34

不幸的是,在我看来,给定的hangfire作业运行在创建它的实例上。如何将Hangfire配置为在所有可用实例上调度作业?

默认情况下,作业将在default队列中。如果运行多个服务器实例,则作业将分发到可用实例。为了进行测试,我只添加了如下任务:

代码语言:javascript
运行
复制
Enumerable.Range(11, 30).ForEach(i =>
{
    BackgroundJob.Enqueue(() => Console.WriteLine($"[Task-{i}] Getting Started with HangFire!"));
});

然后,在控制台应用程序中处理作业,如下所示:

代码语言:javascript
运行
复制
using (var server = new BackgroundJobServer())
{
    Console.WriteLine("Hangfire Server started. Press any key to exit...");
    Console.ReadKey();
}

我启动了两个服务器实例,结果如下:

此外,对于配置作业队列,您可以遵循here。此外,这是一个issue,它与仅在一个服务器实例上运行作业的问题相反。

票数 3
EN

Stack Overflow用户

发布于 2017-12-11 01:07:51

我猜这种行为可能与this pull request有关,当作业在同一实例上排队和处理时,它会添加零延迟作业处理。

通过查看代码,我发现每当我们向队列中添加新作业时,我们都会为事件WaitAny,即Set。然后,我们再次尝试从队列中获取作业。这减少了作业延迟,因为它被更快地接收。

我的假设是,只要当前实例繁忙,就会将多个作业分配给其他实例。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47595352

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档