Repositorio Open Source de documentación en nuevas tecnologías
En el siguiente link encontrará el repositorio creado para este ejemplo práctico: https://github.com/tfg2021-escinf-una/eg.gateway.management . En caso de tener alguna duda con el código, puede revisar directamente en el repositorio, o bien, clonarlo y modificarlo.
Abrir el repositorio microservices-tutorial/gateway-management-microservice
en el editor de texto
En este momento la lista de archivos en el proyecto es la siguiente:
microservices-tutorial
│
└─── gateway-management-microservice
│ │ README.md
│ │ .gitignore
│ │ LICENSE
Para inicializar el proyecto de C# recomendamos utilizar Visual Studio e utilizar el template que la aplicacion ofrece para la construccion del archivo.
Por lo general, los proyectos basados en C#, generan un archivo con la extension .csproj
, en esta es donde se instalan las dependencias necesarias para su adecuado
funcionamiento.
Un ejemplo de un archivo .csproj
es el siguiente: .csproj
Una vez que Visual Studio a creado la estructura de carpetas, vamos a proceder a efectuar un breve cambio en dicha estructura, cabe resaltar, que esta es meramente organizacional y opcional.
microservices-tutorial
│
└─── gateway-management-microservice
│ └─── src
│ │ │ ProjectName.csproj
│ │ │ Routes
│ │ │ ocelot.json
│ │ │ Program.cs
│ │ deployment
│ │ README.md
│ │ .gitignore
│ │ LICENSE
src
es la carpeta donde internamente se encuentra todo el código fuente que es el que genera que la aplicación funcione.deployment
contiene los archivos necesarios para efectuar el despliegue en el cluster de kubernetes.src
└─── gateway-management-microservice
│ │ ProjectName.csproj
│ │ Routes
│ │ ocelot.json
│ │ Program.cs
Routes
que contienen archivos JSON con las rutas, a continuacion mostramos un breve ejemplo:{
"Routes": [
{
"DownstreamPathTemplate": "/api/v1/countries",
"DownstreamScheme": "https",
"DownstreamHostAndPorts": [
{
"Host": "eg-geocities-management-dev-tfg2021-escinf-una.cloud.okteto.net",
"Port": 443
}
],
"UpstreamPathTemplate": "/geocities/countries",
"UpstreamHttpMethod": [ "GET" ]
}
],
"GlobalConfiguration": {
"BaseUrl": "*"
}
}
``` using Microsoft.AspNetCore.Hosting; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.Hosting; using Microsoft.Extensions.Logging; using Ocelot.DependencyInjection; using Ocelot.Middleware; using System.IO; using EG.Gateway.Microservice.Extensions; using Microsoft.AspNetCore.Builder; using Microsoft.Extensions.DependencyInjection; using System;
namespace EG.Gateway.Microservice { public class Program { public static void Main(string[] args) { CreateHostBuilder(args).Build().Run(); }
public static IWebHostBuilder CreateHostBuilder(string[] args) =>
new WebHostBuilder()
.UseKestrel()
.UseContentRoot(Directory.GetCurrentDirectory())
.ConfigureAppConfiguration((hostingContext, config) =>
{
config.SetBasePath(hostingContext.HostingEnvironment.ContentRootPath)
.AddJsonFile("appsettings.json", true, true)
.AddOcelot($"./Routes/{hostingContext.HostingEnvironment.EnvironmentName}/", hostingContext.HostingEnvironment)
.AddEnvironmentVariables();
})
.ConfigureServices(services =>
{
services.AddJwtAuthentication();
services.AddOcelot();
services.AddCors();
})
.ConfigureLogging((hostingContext, logging) =>
{
logging.AddConsole();
})
.Configure(app =>
{
app.UseCors(x => x
.AllowAnyMethod()
.AllowAnyHeader()
.SetIsOriginAllowed(origin => true)
.AllowCredentials());
app.UseOcelot().Wait();
});
} } ``` 7. Ejecutar el servidor
Una vez realizados todos estos pasos, el servidor está listo para recibir peticiones HTTP en el puerto por definir
.