Tengo que desarrollar un componente donde los Apis sean de naturaleza asíncrona. Para desarrollar este modelo asíncrono, usaré las colas de Aws SQS para publicar mensajes y el cliente leerá de la cola y enviará la respuesta nuevamente a la cola. Ahora hay 10 API (actualmente) que tengo que exponer. Actualmente, puedo pensar en tener una sola solicitud y una sola cola de respuesta (que sondearé) para todas las API y la carga útil de las API puede definirse mediante alguna operación. La otra forma es usar una cola separada para cada API. La ventaja que puedo ver para varias colas es que cada API puede tener un tráfico diferente y tener varias colas puede ayudar al cliente de las colas a escalar de manera efectiva. ¿Cuáles pueden ser otros pros o contras para ambos enfoques?
Separe su caso de uso en 2 problemas distintos:
Problema 1: API para trabajadores, ¿una cola o varias?
Si sus trabajadores realizan diferentes tipos de trabajo, tener una sola cola requerirá que inspeccionen y luego descarten los mensajes que no les interesan. Si este es el caso, debería tener una cola por tipo de mensaje. De esta manera, cualquier mensaje que un trabajador reciba de la cola, debería poder manejarlo.
Si comienza a ignorar los mensajes, entonces otros trabajadores, que pueden estar inactivos, pueden estar esperando por un tiempo los mensajes que le interesan.
Problema 2: Uso de una cola de retorno para los "resultados". Si sus clientes van a sondear los resultados, en cada sondeo, su API deberá sondear la cola. Una vez más, estará "buscando" la respuesta correcta, descartando aquellas que no le importan, matando de hambre a otros clientes.
Recomendación:
Utilice varias colas, una por "tipo de trabajador". Los trabajadores deberían poder procesar cualquier mensaje que reciba de la cola.
Luego use algo que no sea SQS para almacenar el resultado. Una opción es usar S3 para almacenar el resultado:
En lugar de S3, se podrían usar otros almacenes de datos si corresponde: RDS, DynamoDB, etc.