配置 Hangfire 通过单独的实例调用 WebAPI,无需在 API 中编写代码

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

我们有很多后台作业过去在控制台应用程序中运行,现在我们已将其转移到 API 调用中。一切都工作正常并完成工作。

我们使用 Quartz.Net 创建了一个单独的 JSON 配置网站,所有 API 调用和调度都在该网站中定义,无需将 Quartz 相关代码写入每个 API 中。

但是,随着 API 数量的增加和复杂的 CRON 表达式(例如,作业应该从上午 9 点到上午 9:10 每 2 秒运行一次,然后减少到 10 秒)。这创建了一个非常复杂的 cron 表达式,管理它们变得很困难,并且负载平衡也是这里的问题,因为当我们对这个网站进行负载平衡时,两台服务器一起启动。

我们想到了使用Hangfire;但是,我对它完全陌生,不知道我们是否可以为 HangFire 创建一个单独的网站并使用配置定期调用 API?

就像一个完全独立的 URL,而不是 API 代码的一部分。

或者

还有其他东西可以为我们做到这一点。云不是一个选择。

hangfire hangfire-sql
1个回答
0
投票

hangfire 带有内置 UI(Hangfire 仪表板),可以轻松托管在您的 Web api 中 - 只需几行代码。

对于 Hangfire 服务器,我建议使用某种工作人员的 Windows 服务来托管 Hangfire 服务器(Hangfire 服务器是负责执行作业的服务器)。你也可以随时将hangfire 服务器添加到 Web api - 但在我看来,这应该是单独的应用程序。

我为什么这么说?

hangfire 有 2 个阶段。

  1. 相 作业初始化 - 作业排队(这意味着将作业定义保存到数据库并设置作业的状态)

  2. 相 作业执行,这就是 Hangfire 服务器发挥作用的地方。它使用 JobActivator 创建作业实例并执行它。

正如您所看到的,这可能是两个完全独立的过程 - 但它们不一定是。

Hangfire 通过扩展方法完全支持 Microsoft DI。一切都非常简单。

Hangfire 还拥有丰富的 API,因此您可以修改作业计划、在特定时间安排新作业等。

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