Hangfire 1.3.4 - 已删除的作业卡在队列中

Hangfire 1.3.4 - deleted jobs stuck in queue

我们是 运行 hangfire 单线程使用 BackgroundJobServerOptions.WorkerCount = 1(因为我们有一个有序处理的要求)。

大多数时候这不是问题,但偶尔会有一个作业完全出于预期的原因而卡住(例如,实际代码 运行 进入无限循环),但因为我们 运行 单线程这会阻止队列中的其他作业启动。

为了尝试解决这个问题,我们删除了该作业,但它仍留在队列中,阻止任何其他作业启动:

我发现解决这个问题的唯一方法是删除并重新创建 hangfire 数据库,这显然不是很好。

为什么在 hangfire 中删除 运行 作业不会同时将其从队列中删除?这种奇怪的删除行为是一个需要在以后的版本中修复的错误,还是因为我们是 运行 单线程而设计的这种行为?

如果这是设计使然,那么您如何以将其从队列中删除的方式取消处理作业?

好吧,这似乎是设计使然。

如果IIS app pool worker被回收,Hangfire会立即开始处理下一个任务。但是,如果不重新启动,Hangfire 将无限期 "hang"。

github 上提出了一个问题,但尚未解决: https://github.com/HangfireIO/Hangfire/issues/80

无法取消或手动 "fail" 作业,这使得 hangfire 在单线程场景中的用处大大降低。

更新:这已在 Hangfire 的某些更高版本中部分或全部解决。