0

ASP.NETコアアプリケーションをプログラムによって再起動する方法が非常に興味深いことがわかりました。ASP.NETコア複数のインスタンスを再起動

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

1つの方法は、Azureからすべてのインスタンスのリストを取得し、ホスト名の代わりにインスタンスのエンドポイントIPアドレスを使用して、それぞれにHTTP呼び出しを分けることです。残念なことに、これをAzureで正確に行う方法はわかりませんが、Amazon CloudではAmazonEC2Client.DescribeInstancesリクエストを使用しています。同様のものが必要です。

もう1つの方法は、メッセージキューを使用することです。したがって、各インスタンスはトピックを購読し、メッセージを受信するときに再起動する必要があります。

関連する問題