Aquí están nuestras condiciones iniciales:
- Nuestro servicio es la aplicación de consola y, a diferencia de la aplicación web ASP.NET Core, no teníamos una solución lista para usar.
- La aplicación se inicia desde el contenedor de la ventana acoplable.
Bueno, descubramos cómo usar la configuración múltiple en una aplicación de consola. Primero, creemos archivos de configuración para nuestros entornos de desarrollo y pruebas:
No hay anidación predeterminada en las aplicaciones de consola. Por lo tanto, abra el archivo de proyecto .csproj y agregue:
<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>
Los archivos adjuntos con el nombre del entorno de desarrollo aparecieron en el archivo appsettings.json:
En los archivos appsettings.Dev.json y appsettings.Testing.json, agregue las partes de la configuración que cambian según el entorno. Cambiemos el nombre de los temas de Kafka en el ciclo de prueba de carga agregando los parámetros necesarios a appsettings.Testing.json:
{
"Kafka":
{
"EventMainTopicTitle": "Test_EventMain",
"EventDelayTopicTitle": "Test_EventDelay",
"EventRejectTopicTitle": "Test_EventReject"
}
}
Solo queda seleccionar el archivo appsettings.json deseado durante el inicio del servicio. Para hacer esto, hagamos cambios en la clase Program:
///
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();
}
Ahora todo está listo para iniciar el servicio en un contenedor docker.
Queda por especificar las variables de entorno para el contenedor. Hay varias formas de hacer esto:
- línea de comando
- Archivo de texto
- docker componer
Me detuve en especificar variables en la línea de comando. Aquí hay un script de ejemplo para crear una imagen y lanzar un contenedor:
# Build image
# docker build . -t consoleapp
# Run container on Dev
# docker run -d <i>--env ASPNETCORE_ENVIRONMENT=Dev</i> --name app consoleapp
Existen soluciones más elegantes para crear una canalización para su implementación, pero este método se puede implementar en poco tiempo, lo cual es muy crítico en la etapa inicial de creación del proyecto.
Enlace a GitHub con el proyecto .
¡Gracias por su atención y codificación agradable!