2016-11-07 272 views
3

我们有一个Azure Scale Out资源,问题是:对于每个实例,Hangfire启动一个新的服务器,任何方式只限于一台服务器?Hangfire只允许一个服务器

+0

只是不启动服务器呢?或者将服务器部署在单独的应用程序中,而您只部署其中一个应用程序? – mason

+0

如何确定是否有Hangfire正在运行?任何API方法? SQL Server选择? TKS – Alexandre

回答

0

此问题的解决方法是:检查SQLServer的,如果有一个活跃的迟发型服务器:

using (var connection = new SqlConnection(myConnString)) 
       { 
        SqlCommand command = connection.CreateCommand(); 
        command.CommandText = "SELECT MAX(LastHeartBeat) FROM HangFire.Server"; 
        connection.Open(); 
        using (SqlDataReader reader = command.ExecuteReader(CommandBehavior.SingleResult)) 
        { 
         if (reader.HasRows) 
         { 
          reader.Read(); 
          DateTime lastBeat = reader.GetDateTime(0); 
          bool myResult = lastBeat >= DateTime.UtcNow.AddHours(-2); 
         } 
        } 
       } 
1

假设你正在使用SQL Server的存储,这似乎是的话,你可以这样做:

GlobalConfiguration.Configuration.UseSqlServerStorage("YourDB"); 
     var servers = Hangfire.SqlServer.SqlServerStorage.Current 
                 .GetMonitoringApi() 
                 .Servers(); 
     if (servers != null && servers.Count < 1) 
      //start new server here;