Básicamente, mis consumidores también son productores. Obtenemos un conjunto de datos inicial y se envía a la cola. Un consumidor toma un elemento y lo procesa, a partir de ese momento hay 3 posibilidades:¿Es posible garantizar que los mensajes únicos estén en una cola rabbitmq?
- datos son buenos y se pone una 'buena' cola de almacenamiento
- de datos es mala y se desecha
- de datos no es bueno (todavía) o malo (aún), por lo que los datos se dividen en partes más pequeñas y se envían nuevamente a la cola para su posterior procesamiento.
Mi problema es con el paso 3, porque la cola crece muy rápido al principio es posible que un dato se descomponga en una parte que se duplique en la cola y los consumidores continúen procesándolo y terminen en un bucle infinito
Creo que la manera de evitar esto es evitar que los duplicados entren en la cola. No puedo hacer esto en el lado del cliente porque en el transcurso de una hora puedo tener muchos núcleos que manejan miles de millones de puntos de datos (hacer que cada cliente lo analice antes de enviarlo me ralentizaría demasiado). Creo que esto debe hacerse por el lado del servidor, pero, como mencioné, los datos son bastante grandes y no sé cómo asegurar de manera eficiente que no haya duplicados.
Podría estar preguntando lo imposible, pero pensé que le daría una oportunidad. Cualquier idea sería muy apreciada.
Estoy tratando de hacer exactamente eso (creo). Al asegurar que no haya duplicados de artículos pasados, me aseguro de que los mismos datos no se procesen más de una vez. Estoy seguro de la implementación en rabbitmq, ¿hay alguna manera de simplemente enviar identificaciones de mensajes y tener rabbitmq descartar duplicados o tengo que establecer un filtro o algo así (si lo hago, ¿cómo funciona con rabbitmq). –
No hay forma de hacerlo, AFAIK. A Rabbit no le importa el contenido de tus mensajes o lo que ya está en tus colas, por lo que dependerá de tu aplicación que te encargues de esto. –
Entonces, si los ID de mis mensajes son únicos (hashcode de mis datos reales), necesitaría almacenarlos en un DB o algo así y consultar en contra de eso (para ver si ID de msg se envió antes) antes de enviarlo a rabbit He estado pensando en eso, pero requeriría que el cliente haga algunas consultas mientras mi servidor de mensajes espera (estaba tratando de ver si podía enviar este trabajo al servidor de mensajes en sí) –