Hier sind unsere Ausgangsbedingungen:
- Unser Service ist die Konsolenanwendung, und im Gegensatz zur ASP.NET Core-Webanwendung hatten wir keine sofort einsatzbereite Lösung.
- Die Anwendung wird über den Docker-Container gestartet.
Lassen Sie uns sehen, wie Sie die Mehrfachkonfiguration in einer Konsolenanwendung verwenden. Lassen Sie uns zunächst Konfigurationsdateien für unsere Entwicklungs- und Testumgebungen erstellen:
In Konsolenanwendungen gibt es keine Standardverschachtelung. Öffnen Sie daher die .csproj-Projektdatei und fügen Sie Folgendes hinzu:
<ItemGroup>
<Content Include="appsettings.json">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
<Content Include="appsettings.Dev.json;appsettings.Testing.json;">
<DependentUpon>appsettings.json</DependentUpon>
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
</ItemGroup>
Angehängte Dateien mit dem Namen der Entwicklungsumgebung wurden in der Datei appsettings.json angezeigt:
Fügen Sie in den Dateien appsettings.Dev.json und appsettings.Testing.json die Teile der Konfiguration hinzu, die sich je nach Umgebung ändern. Lassen Sie uns den Namen der Kafka-Themen in der Lasttestschleife ändern, indem wir die erforderlichen Parameter zu appsettings.Testing.json hinzufügen:
{
"Kafka":
{
"EventMainTopicTitle": "Test_EventMain",
"EventDelayTopicTitle": "Test_EventDelay",
"EventRejectTopicTitle": "Test_EventReject"
}
}
Es bleibt nur die Auswahl der gewünschten Datei appsettings.json während des Starts des Dienstes. Nehmen Sie dazu Änderungen an der Program-Klasse vor:
///
private static IServiceProvider ConfigureServices()
{
//
const string environmentVariableName = "ASPNETCORE_ENVIRONMENT";
//
var environmentName =
Environment.GetEnvironmentVariable(environmentVariableName);
var services = new ServiceCollection();
_configuration = new ConfigurationBuilder()
.SetBasePath(Directory.GetParent(AppContext.BaseDirectory).FullName)
.AddJsonFile("appsettings.json")
// json- environmentName
.AddJsonFile($"appsettings.{environmentName}.json")
.AddEnvironmentVariables()
.Build();
services.AddSingleton(_configuration);
services.AddSingleton<KafkaHandler>();
return services.BuildServiceProvider();
}
Jetzt ist alles bereit, um den Dienst in einem Docker-Container zu starten.
Es bleiben die Umgebungsvariablen für den Container anzugeben. Es gibt verschiedene Möglichkeiten, dies zu tun:
- Befehlszeile
- Textdatei
- Docker komponieren
Ich habe aufgehört, Variablen in der Befehlszeile anzugeben. Hier ist ein Beispielskript zum Erstellen eines Images und Ausführen eines Containers:
# Build image
# docker build . -t consoleapp
# Run container on Dev
# docker run -d <i>--env ASPNETCORE_ENVIRONMENT=Dev</i> --name app consoleapp
Es gibt elegantere Lösungen zum Erstellen einer Pipeline für Ihre Bereitstellung. Diese Methode kann jedoch in kurzer Zeit implementiert werden, was in der Anfangsphase der Projekterstellung sehr wichtig ist.
Link zu GitHub mit dem Projekt .
Vielen Dank für Ihre Aufmerksamkeit und angenehme Codierung!