Publicar Web Api .net core en AWS

jueves, 6 de junio de 2024 Sin comentarios
AWS Toolkit

Como sabemos AWS ofrece una amplia gama de servicios para diversas necesidades proporciona soluciones escalables para negocios de todos los tamaños y sus centros de datos globales aseguran alta disponibilidad y baja latencia. Además tiene acceso gratuito a muchos servicios.
Por estas razones escribimos esta entrada con los pasos para publicar directamente usando el AWSToolKit desde Visual Studio.








  1. Instale AWS Toolkit para Visual Studio si aún no lo ha hecho.
  2. Cree un nuevo proyecto de API web de .NET Core en Visual Studio.
  3. Haga clic derecho en el proyecto en el Explorador de soluciones.
  4. Seleccione «Publicar en AWS» en el menú contextual.
  5. Inicie sesión en su cuenta de AWS cuando se le solicite.
  6. Elija «Elastic Beanstalk» como destino de publicación.
  7. Cree una nueva aplicación o seleccione una existente.
  8. Elija una plataforma, por ejemplo, «Amazon Linux 2 v5.3.0 de 64 bits con .NET Core«.
  9. Configure los ajustes del entorno, como el tipo de instancia.
  10. Proporcione un nombre de entorno y un dominio únicos.
  11. Haga clic en «Siguiente» y revise la configuración.
  12. Haga clic en «Implementar» para publicar su aplicación.
  13. Espere a que se complete la implementación; puede tomar varios minutos.
  14. Una vez implementada, puede acceder a su API web a través de la URL proporcionada.
  15. Supervise y administre su aplicación desde la Consola de administración de AWS.
Categories: asp.net Tags: , , ,

Message Broker: RabbitMQ

viernes, 3 de mayo de 2024 Sin comentarios
rabbitmq
rabbitMQ

En la entrada «Arquitectura microservicios y .Net core» describimos qué y por qué el interés de este tipo de arquitectura.
Una de las ventajas que se mencionaron es el desacoplamiento de estos microservicios, pero entonces ¿cómo se comunican estos microservicios desacoplados? Aquí entra los messages brokers.

Los message brokers, como RabbitMQ, son esenciales en arquitecturas de microservicios para facilitar la comunicación entre los diferentes componentes de la aplicación.
Actúan como intermediarios eficientes, permitiendo que los microservicios se comuniquen de manera asíncrona y desacoplada. Su capacidad para encolar y distribuir mensajes garantiza una alta disponibilidad y escalabilidad, lo que es crucial en entornos de microservicios dinámicos.
RabbitMQ proporciona una variedad de patrones de mensajería, como pub/sub, colas de trabajo y enrutamiento de mensajes, adaptándose a diversas necesidades de comunicación.
Al desacoplar la emisión y recepción de mensajes, los microservicios pueden evolucionar de manera independiente, sin afectar a otros componentes del sistema.
La durabilidad y la persistencia de los mensajes en RabbitMQ aseguran que los datos críticos no se pierdan en caso de fallo o interrupción.

Además, RabbitMQ ofrece características de encriptación y autenticación, garantizando la seguridad de la comunicación entre los microservicios.
Facilita la implementación de patrones de tolerancia a fallos, como la reintentación de mensajes y la gestión de errores, mejorando la robustez del sistema.
Permite la implementación de sistemas distribuidos altamente disponibles, donde los microservicios pueden escalar horizontalmente para manejar cargas variables.
Su arquitectura modular y extensible permite integrarlo fácilmente con otros servicios y herramientas utilizadas en el ecosistema de microservicios.
RabbitMQ ofrece monitoreo y herramientas de administración que permiten supervisar el rendimiento y la salud de la infraestructura de mensajería.
Facilita la implementación de patrones de entrega garantizada y consistencia eventual, lo que es fundamental en aplicaciones distribuidas.
Al promover la comunicación basada en eventos, RabbitMQ facilita la implementación de arquitecturas orientadas a eventos, que son adecuadas para sistemas altamente escalables y resilientes.
Su amplia adopción y comunidad activa proporcionan soporte continuo y recursos de aprendizaje para los equipos de desarrollo.
En resumen, el uso de RabbitMQ como message broker en arquitecturas de microservicios ofrece una serie de beneficios que incluyen escalabilidad, robustez, flexibilidad y seguridad, lo que lo convierte en una herramienta invaluable para el desarrollo de software moderno.

Tres desafíos o inconvenientes al utilizar un message broker como RabbitMQ en software de microservicios:

  1. Complejidad en la gestión y configuración: Configurar y administrar un message broker como RabbitMQ puede ser complejo, especialmente en entornos de microservicios donde hay múltiples instancias ejecutándose y comunicándose entre sí. La configuración de las colas, los intercambios, los enrutamientos y otros aspectos puede requerir un conocimiento profundo de la herramienta y de las mejores prácticas de arquitectura.
  2. Rendimiento y latencia: Aunque los message brokers son una solución eficaz para la comunicación entre microservicios, pueden introducir latencia adicional en las comunicaciones debido al procesamiento y enrutamiento de los mensajes. En entornos donde la latencia es crítica, como aplicaciones de alta velocidad o tiempo real esta sobrecarga puede ser un desafío y requerir optimizaciones adicionales.
  3. Complejidad en el manejo de errores y garantía de entrega: Aunque los message brokers ofrecen mecanismos para garantizar la entrega de mensajes, como confirmaciones y reintentos, gestionar adecuadamente los errores y las situaciones de error puede ser complicado. Los mensajes pueden perderse, duplicarse o entregarse en el orden incorrecto, lo que requiere estrategias de manejo de errores robustas y pruebas exhaustivas para garantizar la integridad de los datos y la fiabilidad del sistema.

10 razones para usar los patrones CQRS y Mediator

martes, 2 de abril de 2024 Sin comentarios

La combinación de Clean Architecture con los patrones CQRS (Command Query Responsibility Segregation) y Mediator proporciona un enfoque poderoso para el diseño de software. En esta sinergia, la Clean Architecture establece una sólida estructura modular y una clara separación de responsabilidades, lo que facilita la comprensión y el mantenimiento del sistema a lo largo del tiempo.

El patrón CQRS divide las operaciones de lectura (queries) de las operaciones de escritura (commands), permitiendo optimizar cada una para su función específica y mejorar la escalabilidad y el rendimiento del sistema. Por otro lado, el patrón Mediator actúa como un intermediario entre los diferentes componentes del sistema, reduciendo las dependencias directas y promoviendo la comunicación a través de mensajes.

  1. El patrón CQRS (Command Query Responsibility Segregation) promueve la separación de las operaciones de lectura (queries) y escritura (commands), lo que facilita la gestión de la complejidad en el acceso a datos.
  2. Al separar las operaciones de lectura y escritura, se pueden optimizar las consultas de lectura para mejorar el rendimiento y la escalabilidad del sistema.
  3. El patrón Mediator actúa como un mediador entre los componentes del sistema, lo que facilita la comunicación entre ellos y reduce la dependencia directa.
  4. Utilizando Mediator en conjunto con CQRS se mejora la modularidad y la mantenibilidad del código, ya que se fomenta la implementación de pequeños componentes independientes.
  5. Al aplicar CQRS y Mediator en el acceso a datos, se puede implementar una arquitectura más flexible y adaptable a los cambios, debido a la separación de responsabilidades y la eliminación de acoplamientos fuertes.
  6. CQRS permite simplificar la lógica de negocios al separar claramente las operaciones de lectura y escritura, lo que facilita la implementación de reglas de negocio específicas en cada capa.
  7. Mediante la implementación de comandos y eventos en el patrón CQRS, se pueden gestionar de manera eficiente las operaciones transaccionales y garantizar la consistencia de los datos en todo momento.
  8. El uso de Mediator facilita la implementación de patrones de diseño como inyección de dependencias, lo que simplifica la configuración y la gestión de las dependencias entre componentes.
  9. CQRS y Mediator permiten mejorar la escalabilidad del sistema al distribuir la carga de trabajo de forma eficiente entre los diferentes componentes, mejorando así el rendimiento y la capacidad de respuesta.
  10. En resumen, la combinación de CQRS y Mediator en el acceso a datos proporciona una arquitectura robusta y flexible que facilita el desarrollo, la prueba y el mantenimiento de aplicaciones, permitiendo una mayor eficiencia y adaptabilidad a los cambios en los requisitos del negocio.

Autenticación / Autorización en API Restful con JWT

domingo, 10 de marzo de 2024 Sin comentarios

.net core jwt
.net jwt autenticación

La autenticación es un aspecto crucial de la seguridad de las aplicaciones web. Garantiza que los
usuarios sean quienes dicen ser antes de otorgarles acceso a recursos o funcionalidades específicas.
Un método popular de autenticación en el desarrollo web moderno son los JSON Web Tokens (JWT). En esta
entrada, exploraremos cómo implementar la autenticación de token JWT en la web api de localización de
establecimientos de farmacia.

En .net core  esta funcionalidad la conseguimos con el Nuget System.IdentityModel.Tokens.Jwt

Entonces al controlador o método que queramos añadir que sean solicitudes autenticadas añadimos la cabecera [Autorize] y creamos otro control en le que escribimos la lógica de autenticación:

[HttpPost]
public IActionResult Post([FromBody] LoginRequest loginRequest)
{
    //If login email and password are correct then proceed to generate token
    var email = loginRequest.Email;
    var password = loginRequest.Password;
    if (email == "email" && password == "password")
    {
        var securityKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(_config["Jwt:Key"]));
        var credentials = new SigningCredentials(securityKey, SecurityAlgorithms.HmacSha256);

        var Sectoken = new JwtSecurityToken(_config["Jwt:Issuer"],
          _config["Jwt:Issuer"],
          null,
          expires: DateTime.Now.AddMinutes(120),
          signingCredentials: credentials);

        var token = new JwtSecurityTokenHandler().WriteToken(Sectoken);

        return Ok(token);
    }
    return Unauthorized();
}

Así con JWT es un medio compacto y seguro para URL para representar identificaciones que se transferirán entre dos partes.
Estos identificadores se pueden firmar digitalmente, lo que los convierte en una forma segura de autenticar y transmitir información entre el cliente y el servidor. Los tokens JWT se utilizan a menudo para:
Autenticación sin estado, autenticación entre orígenes distintos, escalabilidad.

En resumen, podemos decir que, la identificación en APIs RESTful es esencial para garantizar la seguridad. JSON Web Tokens (JWT) se ha convertido en una elección popular para este propósito. Al implementar JWT, la información de identificación del usuario se codifica en un token firmado digitalmente, que luego se envía con cada solicitud. Esto permite a los servidores verificar la autenticidad y autorización de cada solicitud de manera eficiente. Los JWT contienen información como el ID del usuario y roles, facilitando la validación en el servidor sin necesidad de consultar la base de datos en cada solicitud. Además, la expiración del token proporciona una capa adicional de seguridad. En resumen, JWT simplifica la gestión de identidades en APIs RESTful, mejorando la eficiencia y seguridad del sistema.

Programación en tiempo real y protocolos TCP / IP

jueves, 15 de febrero de 2024 Sin comentarios
Vs 2022 TCPServer / TCPClient

La programación en tiempo real con .net 8 / C# y protocolos TCP/IP permite desarrollar aplicaciones que requieren respuestas inmediatas y precisas en entornos críticos. Al utilizar C# para implementar el código, se aprovechan las características de este lenguaje orientado a objetos, como la facilidad de mantenimiento y la gestión automática de la memoria.

En este contexto, el protocolo TCP/IP se convierte en el puente de comunicación, garantizando la fiabilidad y la entrega ordenada de datos entre dispositivos. En el código C#, la clase TcpClient y TcpListener facilitan la implementación de conexiones TCP, mientras que la gestión de hilos permite manejar las operaciones en tiempo real de manera eficiente.

Este el el código de ejemplo creado en dos proyectos de consola. Tenemos el proyecto TCPServer, que a partir de un IPEndPoint crea un TCPListener  al que los TCPClient en otro proyecto de consola llaman.

Es crucial establecer una comunicación eficiente entre los nodos para garantizar la sincronización precisa. Utilizando el espacio de nombres System.Net.Sockets, se pueden implementar mecanismos de lectura y escritura asíncronos para optimizar el rendimiento y mantener la capacidad de respuesta en tiempo real.

En resumen, la combinación de C# .net y protocolos TCP/IP ofrece un entorno propicio para el desarrollo de aplicaciones en tiempo real, proporcionando una base sólida para sistemas que requieren alta velocidad y precisión en la transmisión de datos.

Categories: General Tags: , ,