在没有数据库存储的情况下使用 HangFire 进行后台作业处理?

Posted

技术标签:

【中文标题】在没有数据库存储的情况下使用 HangFire 进行后台作业处理?【英文标题】:Using HangFire for background job processing without DB storage? 【发布时间】:2021-09-09 05:55:23 【问题描述】:

我有一个 ASP.NET 4.6 Web API。该应用程序没有独立的数据库,它是一个为搜索文件而设计的微服务。我想在后台实现一个 CRON 作业并利用 HangFire。问题是,似乎存储是强制性的,不建议将Memory Storage 用于生产。

我有什么选择?

【问题讨论】:

【参考方案1】:

没有任何解决方案可以在生产环境中使用,但是有一个nuget 包可以帮助您使用HangFire,它可以用于测试目的,例如检查行为并在开发环境中使用它。

不应该在生产中使用(没有完整性和线程安全 即使管理了许多案例)。 使用字典以静态方式将数据存储在内存中(请参阅 创建存储时创建的数据)

来源:Hangfire.MemoryStorage

nuget 包:Hangfire.MemoryStorage

GlobalConfiguration.Configuration.UseMemoryStorage();

上面的包不能覆盖生产环境中的内存作业,但下面的库提供了可以在生产模式下使用的条件:

Hangfire.InMemory

这是为Hangfire 创建高效的事务性内存存储的尝试,其数据结构接近其最佳表示。这一尝试的结果应该能够使该存储实现的生产就绪使用并处理内存中处理的特定属性,例如不惜一切代价避免OutOfMemoryException 和适度的垃圾收集负载。当然我们不能完全避免它们,但至少可以以某种方式控制它们。

【讨论】:

这个库怎么样?好像已经准备好生产了? github.com/HangfireIO/Hangfire.InMemory 查看了这个库的代码,这个库提供了可以在生产环境中使用的条件,它也很好的覆盖了大部分情况,但是你必须自己处理内存泄漏异常。我在这个答案中添加了这个带有描述的 nuget 包以供公众使用。

以上是关于在没有数据库存储的情况下使用 HangFire 进行后台作业处理?的主要内容,如果未能解决你的问题,请参考以下文章

如何访问失败的Hangfire作业

让 Hangfire 使用 MongoDB 存储

abp 使用 hangfire结合mysql

.NET之Hangfire快速入门和使用

hangfire代码里把方法删了 还能继续执行

Hangfire实战--添加DashBoard登录权限