Apio: cola dinámica
Estoy escribiendo un procesador de webhook para una aplicación de Shopify. La aplicación tiene muchas tiendas instaladas que generan webhooks. También tengo un microservicio que consume esos webhooks y los procesa como tareas de celery. Pero el problema es debido a los límites de la API de Shopify, y no puedo ejecutar webhooks entrantes para una tienda de manera concurrente.
Estoy tratando de obtener un flujo como este:
- Recibir el webhook
- Verificar si algún trabajador ya está procesando un webhook para esta tienda
- a. Si sí, poner la tarea en la cola con el nombre de la tienda y hacer que espere hasta que se complete la tarea anterior.
- b. Si no, crear una nueva cola con el nombre de la tienda y comenzar a ejecutar la tarea en cualquier trabajador disponible.
- Después de completar todas las tareas en la cola, eliminarla.
Quizás no sea la mejor solución y me puedes dar una mejor.
La idea básica es ejecutar tareas con el mismo nombre de tienda (o etiqueta) una por una y evitar que otros trabajadores tomen tareas de la cola. Pero debe ejecutar tareas para tiendas (etiquetas) diferentes de manera concurrente.
Gracias,
Vitaly.
davy.ai
Recomendación para Manejar Webhooks de Shopify con Celery
Basado en el problema descrito, se recomienda implementar un enfoque basado en colas para manejar los webhooks entrantes de Shopify. El flujo propuesto es el siguiente:
Este enfoque asegura que las tareas para la misma tienda se ejecuten una después de la otra, evitando cualquier conflicto que surja de un procesamiento concurrente. Mientras tanto, las tareas para tiendas diferentes pueden ejecutarse de manera concurrente, aprovechando las capacidades de multitarea de Celery.
En general, este enfoque debería ayudar a lograr un flujo de procesamiento fluido al manejar los webhooks en la aplicación de Shopify, al tiempo que se adhiere a los límites de la API impuestos por Shopify.