Лучший способ справиться с таймаутами ответа веб-перехватчика в Flask? - PullRequest
1 голос
/ 04 августа 2020

У меня есть приложение Flask, работающее в облачной функции Google, которое получает Webhook от Shopify при создании заказа. Проблема в том, что у меня очень часто тайм-аут, вот что я имею в виду:

@app.route('/', methods=['POST'])
def connectToSheets(request):
    print('Webhook received...')

    # Verify request is coming from Shopify
    data = request.data
    hmac_header = request.headers.get('X-Shopify-Hmac-SHA256')
    verify_webhook(data, hmac_header)
    print('Request validated...')

    # Do some stuff...

Shopify docs утверждает, что существует период ожидания 5 se c и повторная попытка период подписок. После того, как я проверяю запрос, появляется довольно много кода, поэтому я почти каждый раз отключаюсь.

Есть ли способ отправить код состояния 200 в Shopify после проверки Webhook и до того, как я начать обработку Webhook? Или есть обходной путь?

Ответы [ 2 ]

1 голос
/ 06 августа 2020

Один из способов сделать это полностью с помощью облачных функций - настроить две функции:

  • одна, которая обрабатывает начальный запрос,
  • вторая, которая выполняет обработку и затем следует ответ

Помимо обработки начального запроса первая функция также вызывает вторую функцию через Cloud Pub / Sub.

См. https://dev.to/googlecloud/getting-around-api-timeouts-with-cloud-functions-and-cloud-pub-sub-47o3 для полного примера (здесь используется веб-перехватчик Slack, но поведение должно быть аналогичным).

0 голосов
/ 04 августа 2020

Раньше я сталкивался с той же проблемой, что и ваша. Итак, мы переместили код обработки из встроенного в выполнение в фоновой задаче с помощью celery и rabbitMq. RabbitMq использовался для управления очередью. Вы также можете использовать Redis для управления очередью.

Celery - https://docs.celeryproject.org/en/stable/getting-started/index.html

RabbitMq - https://www.rabbitmq.com/documentation.html

Асинхронный Задачи с использованием Flask, Redis и Celery - https://stackabuse.com/asynchronous-tasks-using-flask-redis-and-celery/

Как настроить очередь задач с помощью Celery и RabbitMQ - https://www.linode.com/docs/development/python/task-queue-celery-rabbitmq/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...