3
我们有一个Azure Scale Out资源,问题是:对于每个实例,Hangfire启动一个新的服务器,任何方式只限于一台服务器?Hangfire只允许一个服务器
我们有一个Azure Scale Out资源,问题是:对于每个实例,Hangfire启动一个新的服务器,任何方式只限于一台服务器?Hangfire只允许一个服务器
此问题的解决方法是:检查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);
}
}
}
假设你正在使用SQL Server的存储,这似乎是的话,你可以这样做:
GlobalConfiguration.Configuration.UseSqlServerStorage("YourDB");
var servers = Hangfire.SqlServer.SqlServerStorage.Current
.GetMonitoringApi()
.Servers();
if (servers != null && servers.Count < 1)
//start new server here;
只是不启动服务器呢?或者将服务器部署在单独的应用程序中,而您只部署其中一个应用程序? – mason
如何确定是否有Hangfire正在运行?任何API方法? SQL Server选择? TKS – Alexandre