Стратегии предотвращения состояний гонки в Webhook

Всем привет! :waving_hand:

Я работаю над реализацией двусторонней синхронизации между Discourse и Discord. На стороне Discourse я использую вебхуки для событий тем и сообщений (создание, редактирование, удаление, восстановление), чтобы передавать обновления в соответствующие каналы Discord. Обратное направление обрабатывается ботом, написанным на discord.js.

У меня возникли проблемы с тем, чтобы мое промежуточное ПО корректно обрабатывало эти события — в основном из-за состояния гонки между моментами получения вебхуков тем и сообщений.

Буду рад получить советы о том, как лучше всего с этим справиться. Сейчас я рассматриваю возможность полностью отказаться от вебхуков тем и построить всё на событиях сообщений (используя topic_id как объединяющий ключ). Тем не менее, я бы предпочел найти способ заставить работать текущую настройку, а не переписывать всё с нуля.

Любые идеи или предложения будут очень кстати! :folded_hands:

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

Вы имеете в виду, что вебхук post приходит раньше вебхука topic? Учитывая асинхронную природу процесса, такое действительно может происходить.

Так что я обрабатывал и вебхуки тем, и вебхуки постов, но теперь перешёл только на вебхуки постов и использую доступную в них информацию для связывания потоков <> тем.

Это хорошее изменение — оно сделает вашу систему гораздо более надёжной, и, как вы и сказали, вы всегда можете обращаться к API-запросам для обогащения данных.