Как создать метод Rails/Ruby, похожий на функцию javascript throttle/debounce
В нашем приложении мы выставляем маршрут обратного вызова для внешнего сервиса, чтобы поразить. Когда мы получаем обратный вызов, мы публикуем обновление для подписчиков на стороне клиента, используя Eventsource на стороне клиента / браузера и ограничивая на стороне сервера. Однако иногда мы сталкиваемся с запросами обратного вызова от этого внешнего сервиса, что приводит к тому, что мы публикуем дерьмовую кучу обновлений для клиента. Есть ли способ на стороне Rails, подобный функции отладки javascript, который бы ожидал установленное время между полученными обратными вызовами, чтобы опубликовать сообщение?
Мы уже используем sidekiq + threads, так что открывайте предложения, используя эти инструменты.
1 ответ
Доступен гем Sidekiq-debounce.
Другой подход (без такой жемчужины) заключается в использовании Rails.cache
запускать исполнение только один раз за раз
delay = 1.minute
Rails.cache.fetch('unique-identifier-of-the-job', expires_in: delay) do
YourActiveJobHere.set(wait: delay).perform_later('your-action')
end