0

Ich fand eine recht interessante Möglichkeit, eine ASP.NET Core-Anwendung programmgesteuert neu zu starten.ASP.NET Core mehrere Instanzen neu starten

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(); 
    } 
} 

und dann in der Steuerung:

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

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

Es funktioniert wirklich gut. Dadurch wird die Anwendung tatsächlich beendet, aber bei der nächsten Anfrage an die App wird sie gestartet.

Nun, wie werde ich dasselbe erreichen, wenn ich mehrere Instanzen wie zum Beispiel in Azure installiert habe?

Antwort

1

Eine Möglichkeit besteht darin, die Liste aller Instanzen von Azure abzurufen und den HTTP-Aufruf für jeden von ihnen unter Verwendung der IP-Adresse des Instanzendpunkts anstelle des Hostnamens zu trennen. Leider weiß ich nicht, wie dies genau in Azure zu tun ist, aber in Amazon Cloud verwenden wir AmazonEC2Client.DescribeInstances Anfrage, und es sollte etwas ähnliches sein.

Eine andere Möglichkeit besteht darin, die Nachrichtenwarteschlange zu verwenden. Daher sollte jede Instanz das Thema abonnieren und beim Empfang der Nachricht einen Neustart durchführen.