使用 Hangfire 的多个服务实例(共享 tasks/objects),可能吗?

Multiple service instances using Hangfire (shared tasks/objects), is it possible?

出于冗余原因,我需要 运行 具有相同数据库的同一服务的多个实例。

我发现了一些关于 "Hangfire multiple instances" 的问题,但与我的目的不同:通常是 运行 在同一数据库上针对不同任务设置多个实例,或与此类似。

我想知道当 2 个或多个 Hangfire 实例使用同一个数据库(我们想使用 MongoDB)时是否存在并发问题,以及这是否是使服务具有弹性的解决方案。
目标是让实例在另一个实例出现故障时处理所有作业。

任何有关涵盖此场景的建议。

在我们的环境中,我们有大约 10 个 Hangfire 服务器使用的副本集。如果有多个 Hangfire 服务器为同一个队列提供服务,这意味着它们将分担负载,并且首先检查队列的 Hangfire 服务器将接管工作并继续。如果您删除除 1 台服务器以外的所有服务器,作业将继续(只要有足够的工作人员,否则他们将保持排队直到有工作人员可用)。

回答你的问题,是的,你可以有 2 个或更多的 Hangfire 服务器使用相同的 MongoDB。 MongoDB 提供多线程支持,因此让不同的服务器访问同一个数据库后端是安全的。如果您有两台服务器,两台服务器都将处于活动状态,如果一个实例掉线,另一个实例(基于队列)将继续处理队列中的作业。

请记住,Hangfire 服务器处理特定队列中的作业。如果两台服务器都属于同一个队列,那么您将在两台服务器之间对作业进行负载平衡。如果它们是不同队列的一部分,那么您将了解每个 Hangfire 实例处理不同作业的场景(因为它们是不同队列的一部分)。

Read about configuring Job Queues here