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請求,並且應該有類似的東西。

另一種方法是使用消息隊列。所以每個實例都應該訂閱該主題,並在收到消息時重新啓動。