Estamos usando Docker compose para levantar 3 replicas en local tanto del producer como consumer
services:
producer:
build: . # Construye la imagen desde el Dockerfile
deploy:
replicas: 3 # Lanza 3 instancias automáticamente
resources:
limits:
cpus: "1.0"
memory: "1g"
volumes:
- "/home/rubn/logs:/home/rubn/logs" # Carpeta compartida de logs
ports:
- "0:8083" # Exponemos el puerto-
1 CPU
-
1 GB de ram
-
3 Threads configurables por cada instancia/replica de productor
-
Concurrencias ajustable por parte del consumer
Ahora mismo tanto producer/consumer envian datos al broker en el NAS
Por medio de esta config en el application.yml
spring:
cloud:
function:
definition: consumer
stream:
default-binder: rabbit
rabbit:
bindings:
consumer-in-0:
consumer:
prefetch: 1
binders:
rabbit:
type: rabbit
environment:
spring:
rabbitmq: (1)
host: ${URL_BROKER}
port: 5672
username: ${USER}
password: ${PASSWORD}
bindings:
consumer-in-0: # Canal de entrada (Consumidor)
destination: performance-queue
group: my-consumer-group
consumer:
concurrency: 5 # Numero de consumidores concurrentes
prefetch: 1-
Desde aqui, usamos esto para conectarnos al broker
Para esta prueba el prefetch se dejara en uno, porque en caso de que una instancia se caiga, no se perderan mensajes, queremos que todos los mensajes los procese el consumer.
En el IDE IntelliIdea podemos forzar a incluir el parametro --build y obligar la reconstrucción del contenedor para usar los ultimos cambios
lo que seria en realidad esto pero desde consola
docker compose up --build -dLa siguiente imagen, con IntellJ, se en el badge Build: Always por lo visto es el equivalente a la opción de docker de reconstruccion del proyecto.
video:images/rabbit-docker-compose.mp4[width=100%,start=60,opts=autoplay]

