es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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.

Tags:  ,

Answer

  1. Avatar for 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:

    1. Cuando se recibe un webhook, verificar si algún trabajador ya está procesando un webhook para esta tienda.
    2. Si es así, colocar la tarea en una cola específica dedicada al nombre/etiqueta de la tienda y hacer que espere hasta que la tarea anterior para esa tienda se complete.
    3. Si no, crear una nueva cola con el nombre/etiqueta de la tienda y comenzar a ejecutar la tarea en cualquier trabajador disponible.
    4. Después de completar todas las tareas en la cola para una tienda específica, eliminar la cola.

    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.

Comments are closed.