C# 水平缩放的Hangfire

C# 水平缩放的Hangfire,c#,asp.net-mvc,azure,hangfire,C#,Asp.net Mvc,Azure,Hangfire,我想利用hangfire库来运行定期任务。为了这个问题的简单性 我只想每5分钟运行一个任务 我已经正常设置了壁炉。它指向我的数据库。然后我将我的web项目推送到我的azure web应用程序。所有人都快乐地奔跑。每5分钟我的任务就会运行一次 但现在,当我的需求增加时,我会自动或手动将我的web服务器扩展到3个实例 此任务是否会在所有3个服务器实例上执行 如何设计它,使任务只执行一次,而不管是哪个服务器或实例创建了该任务。来源: 可以在一个进程内运行多个服务器实例, 机器,或同时在多台机器上。每台

我想利用hangfire库来运行定期任务。为了这个问题的简单性

我只想每5分钟运行一个任务

我已经正常设置了壁炉。它指向我的数据库。然后我将我的web项目推送到我的azure web应用程序。所有人都快乐地奔跑。每5分钟我的任务就会运行一次

但现在,当我的需求增加时,我会自动或手动将我的web服务器扩展到3个实例

此任务是否会在所有3个服务器实例上执行

如何设计它,使任务只执行一次,而不管是哪个服务器或实例创建了该任务。

来源:

可以在一个进程内运行多个服务器实例, 机器,或同时在多台机器上。每台服务器使用 执行协调逻辑的分布式锁

也就是说,您将有3个Hangfire实例,但单个作业将仅由其中一个实例执行,但是,这可能不是每次都在同一台服务器上。为此,您可以按照StackOverflow的回答进行操作,该回答涉及将作业分配到特定于您希望在其上进行处理的服务器的队列:

来自:

可以在一个进程内运行多个服务器实例, 机器,或同时在多台机器上。每台服务器使用 执行协调逻辑的分布式锁


也就是说,您将有3个Hangfire实例,但单个作业将仅由其中一个实例执行,但是,这可能不是每次都在同一台服务器上。为了做到这一点,您可以遵循这个StackOverflow答案,其中包括将作业分配到特定于您希望在其上进行处理的服务器的队列:

只是出于好奇,如果您使用Azure,为什么不使用Azure函数或webjobs来运行定期任务?我使用的是Azure。我会调查这些。ATM该项目全部包含在一个web项目中,当所有代码位于同一位置时易于管理。出于好奇,如果您使用Azure,为什么不使用Azure函数或webjobs来运行定期任务?我使用Azure。我会调查这些。ATM项目全部包含在一个web项目中,当所有代码位于同一位置时,易于管理。好的,这很完美,因此默认情况下内置了我所需的操作。好的,这很完美,因此默认情况下内置了我所需的操作。