Solución:
Creo que lo estás haciendo mal.
Me parece que estás usando la misma cola para hacer varias cosas diferentes. Es mejor utilizar una sola cola para un solo propósito.
En lugar de poner un evento en la cola de ‘registro nuevo’ y luego tener dos servicios diferentes que sondean esa cola, y AMBOS necesitan leer ese mensaje y ambos hacen algo diferente con él (y luego necesitan un tercer proceso que se supone que debe eliminarlo) mensaje después de que los otros 2 lo hayan procesado).
Una cola debe usarse para un propósito.
-
Cree una cola de ‘index-user-search’ y una cola de ‘enviar a mixpanels’, para que el servicio de búsqueda lea de las colas de búsqueda, indexe al usuario y elimine inmediatamente el mensaje.
-
El servicio mixpanel lee de la cola de paneles mixtos, procesa el
mensaje y elimina el mensaje.
El servicio de registro, en lugar de emitir un ‘registro nuevo’ a una sola cola, ahora lo emite a dos colas.
Para dar un paso mejor, agregue SNS a la mezcla aquí y haga que el servicio de registro emita un mensaje SNS al tema ‘registro nuevo’ (no a la cola), y luego suscriba las dos colas que mencioné anteriormente, a ese tema en un patrón de ‘abanico’.
https://aws.amazon.com/blogs/aws/queues-and-notifications-now-best-friends/
Ambas colas recibirán el mensaje, pero solo lo cargará en SNS una vez; si en el futuro un tercer servicio no relacionado necesita procesar también eventos de ‘registro nuevo’, cree otra cola y suscríbase al tema también, puede ejecutar sin dependencias o sin conocimiento de lo que están haciendo los otros servicios, ese es el objetivo.
El caso de uso principal para varios consumidores de una cola es el escalado horizontal.
El mecanismo que permite varios consumidores es el tiempo de espera de visibilidad, que le da tiempo al consumidor para procesar y eliminar un mensaje sin que otro consumidor lo consuma simultáneamente.
Para abordar la propiedad “Entrega al menos una vez” de las colas estándar, el servicio consumidor debe ser idemptotente. Si eso no es posible, una posible solución es usar colas FIFO, pero este modo tiene una tasa de entrega de mensajes limitada y no es compatible con la suscripción a SNS.