Зачем нам нужна очередь при использовании webhooks? - PullRequest
0 голосов
/ 04 сентября 2018

Кто-нибудь может уточнить, какова цель использования очереди?

Что я понимаю, это то, что webhook - это просто URL, вы делаете POST запрос к этому URL, а затем делаете некоторые вещи, основанные на теле / ​​данных запроса. Так почему мне нужно поставить данные в очередь и сохранить их в database, затем снова пройтись по базе данных и выполнить все это.

Ответы [ 2 ]

0 голосов
/ 04 сентября 2018

Короткий ответ: вам не нужно использовать очередь. Webhook - это просто HTTP-запрос (обычно POST), уведомляющий ваше приложение о каком-либо типе события. Причина, по которой вы можете рассмотреть очередь, заключается в типичных проблемах, с которыми вы можете столкнуться.

Один из них из-за времени ответа на запрос веб-крючка (источник). Многие источники хотят получить ответ (HTTP-статус 200) как можно быстрее, чтобы они могли исключить запрос из своей системы webhook. Если обработка webhook занимает некоторое время, источник обычно советует вам использовать очередь, чтобы отложить более длительный процесс, асинхронный с ответом 200 на webhook.

Другой возможной причиной может быть удаление повторяющихся запросов. С веб-зацепками нет гарантии, что вы получите только один запрос на событие. Очередь может использоваться для устранения этих запросов.

Я бы порекомендовал вам придерживаться простого обработчика запросов, если это возможно, а затем разработать более сложный обработчик, если вы столкнетесь с проблемами. Рассматривайте очереди как потенциальный подход к проектированию, если вы столкнетесь с проблемами, подобными приведенным выше.

0 голосов
/ 04 сентября 2018

Вам нужен какой-то способ предотвратить конфликт, если веб-крючок вызывается несколько раз очень близко друг к другу.

Впрочем, это не обязательно должна быть очередь. Если webhook выполняет запросы и обновления базы данных, вы можете использовать транзакцию, чтобы убедиться, что она является атомарной для каждого вызова.

В этом отношении он мало отличается от любой другой веб-утилиты. Вы должны сделать нечто подобное в скриптах, обрабатывающих веб-формы.

...