在 .net 解决方案中使用 Hangfire 处理多个项目

12

我希望将 Hangfire 实现到我的 asp.net web api 和 asp.net MVC 网站项目中。

我方案的结构如下:

解决方案 - My Solution
1:模型 - (包含 Entity Framework 对象和类的项目)
2:服务(这是我实现所有业务逻辑、更改等的地方。这里最有可能使用 HangFire。)

3:Web API(我的 asp.net api 项目)
4:Web UI(mvc 5 管理界面网站)

项目 3 和 4 都使用 2:Services 项目来执行工作并调用服务,这些服务执行业务逻辑。这是大多数任务将被分离的地方。

我应该如何实施 Hangfire,以便它们各自的 iis 网站都可以使用相同的“实例” of Hangfire。但它显然会在关联的应用程序池上运行?

或者也许它不能像那样工作,我必须让它在一个地方运行?

我有哪些选项,此外,什么是推荐的方法?

1个回答

3
我最大的收获是,HangFire不会在工作池关闭(即空闲超时)后继续运行,这本来就是我的核心问题,并建议修改服务器配置以永远不关闭工作池。如果您的应用程序将全天候不断使用,则这对您来说不应该是问题,尽管由于各种原因,您的工作池仍可能被回收,但对于用户经历峰值和低谷的应用程序,您可能需要考虑使用独立于进程的HangFire服务器。
我的方法是后者。我正在构建一个概念验证,其中包括一个Windows服务(使用Topshelf构建-强烈推荐此项工作),该服务托管HangFire服务器(和仪表板)、共享的核心库和客户端(在生产中将是我的WebAPI,但在PoC中是WPF应用程序)。客户端使用来自共享库的类实例将作业加入队列,HangFire服务器也可以访问它。
我假设从您的描述中可以得出结论,WebAPI控制器操作调用服务层中相应的类方法?如果是这种情况,那么我会选择与我的解决方案类似的解决方案,HangFire Windows服务可以根据需要访问您的服务和模型。
如果你的应用程序将会有大量流量,并且工作池回收不会打扰你,那么我建议直接在你的WebAPI中托管HangFire服务器。

我认为你试图做的正是我想要做的:我想要做以下事情:Windows服务(执行任务),Web-API(在数据库中创建和排队任务),MVC-Web应用程序(仪表板和排队任务)。 - Zapnologica

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接