0

我发现了一种非常有趣的方式来以编程方式重新启动ASP.NET Core应用程序。ASP.NET Core重新启动多个实例

public class Program 
{ 
    private static CancellationTokenSource cancelTokenSource = new CancellationTokenSource(); 

    public static void Main(string[] args) 
    { 
     var host = new WebHostBuilder() 
      .UseKestrel() 
      .UseContentRoot(Directory.GetCurrentDirectory()) 
      .UseIISIntegration() 
      .UseStartup<Startup>() 
      .UseApplicationInsights() 
      .Build(); 

     host.Run(cancelTokenSource.Token); 
    } 

    public static void Shutdown() 
    { 
     cancelTokenSource.Cancel(); 
    } 
} 

,然后在控制器:

public class HomeController : Controller 
{ 
    public IActionResult Index() 
    { 
     return View(); 
    } 

    public IActionResult Restart() 
    { 
     Program.Shutdown(); 
     return RedirectToAction("Index", "Home", null); 
    }  
} 

它的作品真的很好。这实际上会关闭应用程序,但下一次请求将启动应用程序。

现在,如果在Azure中安装多个实例,我将如何实现相同目标?

回答

1

一种方法是从Azure获取所有实例的列表,然后使用实例端点IP地址而不是主机名将HTTP呼叫单独分配给每个实例。不幸的是,不知道如何在Azure中完全做到这一点,但在Amazon Cloud中,我们使用AmazonEC2Client.DescribeInstances请求,并且应该有类似的东西。

另一种方法是使用消息队列。所以每个实例都应该订阅该主题,并在收到消息时重新启动。