Observador (en inglés: Observer) es un patrón de diseño de software que define una dependencia del tipo uno a muchos entre objetos, de manera que cuando uno de los objetos cambia su estado, notifica este cambio a todos los dependientes.
El Misterioso Mundo de la Programación
lunes, 13 de junio de 2022
Patrón de diseño basado en eventos
Procesamientos de eventos
- Publicación/suscripción-->la infraestructura de mensajería mantiene el seguimiento de las suscripciones. Cuando se publica un evento, se envía el evento a cada suscriptor. Después de que se recibe un evento, no se puede reproducir, y los nuevos suscriptores no ven el evento. (Rabbit)
- Flujo de eventos-->los eventos se escriben en un registro. Los eventos siguen un orden estricto (dentro de una partición) y son duraderos. Los clientes no se suscriben al flujo, sino que un cliente puede leer desde cualquiera de sus partes. El cliente es responsable de avanzar su posición en el flujo. Esto significa que un cliente puede unirse en cualquier momento y puede reproducir los eventos. (Kakfka). Hay varios tipos de flujo de eventos:
- El procesamiento de flujos de eventos utiliza una plataforma de transmisión de datos, como Apache Kafka, para incorporar los eventos y procesar o transformar su flujo. Este procesamiento se puede utilizar para detectar patrones significativos en los flujos.
- El procesamiento de eventos simple surge cuando un evento desencadena inmediatamente una acción en el consumidor.
- El procesamiento de eventos complejo requiere que un consumidor de eventos procese una serie de ellos para detectar patrones.
Un evento puede estar hecho de dos partes, el encabezado evento y el cuerpo evento. El encabezado de evento puede incluir información como el nombre del evento, fecha y hora para el evento, y el tipo de evento. El texto del evento es la parte que describe lo que ha ocurrido en realidad.
Capas del flujo del evento
Una arquitectura de evento disparado se basa en cuatro capas lógicas:
- Generador evento
- Canal de evento
- Motor de procesamiento de eventos
- Actividad de descarga dirigida por evento
Diferencias entre patrón DAO y Repository
Una de las principales diferencias entre DAO y Repository se halla en el nivel en el que se ubican. El primero se ubica en un nivel mas bajo, mucho mas cerca a la fuente de datos, mientras que el segundo se ubica al mismo nivel de la capa de modelo de dominio, un poco más arriba que el primero.
Patrón de diseño DAO
DAO es el patrón mas usado para realizar la persistencia de los objetos de dominio, la forma mas común y básica de este patron es una clase que contiene las operaciones CRUD (Create, Read, Update, Delete).
Este patrón nos permite separar la lógica del negocio con respecto a la lógica de persistencia, de esta forma se pueden crear variedad de implementaciones de persistencia (usando ORM o ADO.Net) sin que lleguen a afectar al dominio. El problema es que mayormente este patrón no tiene una responsabilidad bien definida y muchos lo toman como una pasarela para hablar con la base de datos, creando un método para cada posible consulta que se realice o por cada actualización parcial
miércoles, 27 de abril de 2022
Usando Docker y Jenkins
- Comandos:
Abrimos un navegador web y accedemos a http://localhost:8081 para entrar en la consola de administración de Jenkins.
La contraseña que se solicita la podemos obtener en la salida de la ejecución del comando anterior o ejecutando el siguiente comando:
Con el identificador del contenedor (la primera cadena de caracteres) lanzamos el siguiente comando y obtendremos la contraseña que nos solicitan al acceder a localhost:8081 :
docker exec -it 3183b39448bd cat /var/jenkins_home/secrets/initialAdminP
Si queremos que los cambios que realicemos en la configuración de Jenkins persistan incluso tras la destrucción del contenedor, debemos arrancar el contenedor con un volumen:
docker run -p 8081:8080 -p 50000:50000 -v jenkins_home:/var/jenkins_home jenkins/jenkins
- Crear una imagen Docker con Jenkins a medida: para no tener que repetir las configuraciones manuales en cada nueva instalación podemos construir una imagen Docker con Jenkins a medida con todo lo que necesitemos. Lo podemos hacer con el DockerFile, añadiendo las instrucciones que necesitemos para crear la imagen o con Docker Compose (docker-compose.yml) con el que podemos ejecutar una serie de servicios como diferentes contenedores donde tienen que interactuar entre sí.
Usar Compose es básicamente un proceso de tres pasos.
- Defina el entorno de su aplicación con un Dockerfile para que pueda reproducirse en cualquier lugar.
- Defina los servicios que conforman su aplicación en docker-compose.yml para que puedan ejecutarse juntos en un entorno aislado.
- Por último, ejecute docker-compose up y Compose se iniciará y ejecutará toda la aplicación.
FROM jenkins/jenkins:ltsLABEL MAINTAINER = PruebasDocker
services:
pruebas-jenkins-master:
container_name: jenkins1
image: pruebas/jenkins:1.0.0
ports:
- "8081:8080"
networks:
- pruebas-ci-network
volumes:
- pruebas-jenkins-master:/
- /usr/bin/docker:/usr/bin/
- /var/run/docker.sock:/var/run/
restart: always
pruebas-sonarqube:
container_name: sonarqube
image: sonarqube:community
ports:
- "9002:9000"
restart: always
volumes:
pruebas-jenkins-master:
name: pruebas-jenkins-master
networks:
pruebas-ci-network:
name: pruebas-ci-network
driver: bridge
ipam:
driver: default
config:
- subnet: 172.16.239.0/24
version: Los archivos docker-compose.yml son versionados, lo que significa que es muy importante indicar la versión de las instrucciones que queremos darle. A medida de que Docker evoluciona, habrá nuevas versiones, pero de todos modos, siempre hay compatibilidad hacia atrás.