При разработке центра уведомлений мы хотим отправить sh вновь созданные уведомления пользователю. (используя WebSocket, но это не имеет отношения к вопросу.) Однако уведомления генерируются очень быстро, поэтому мы хотим использовать метод throttle (a термин в Loda sh или см. этой визуализации ). Мы ограничим событие «генерирование уведомлений».
Визуализация: ось X - это время. Первая синяя строка - это сгенерированные уведомления, не обязательно, конечно, с одинаковым интервалом времени. Красный ряд - это удушенные события. (игнорируйте зеленый)
Проблема заключается в том, как это реализовать. У нас есть простое решение:
- Всякий раз, когда генерируется уведомление, помещайте в Кафку «отложенную задачу» с delay = throttleTime.
- Когда Кафка доставляет нам отложенное сообщение проверьте
lastActionTimestamp
в Redis. Если currentTimestamp - lastActionTimestamp < throttleTime
, это означает, что это сообщение следует выбросить. В противном случае выполните действие и обновите lastActionTimestamp
в Redis, чтобы оно соответствовало текущему времени.
Я думаю, что это немного сложно. Так есть ли лучшие или более простые методы? Или есть какие-нибудь библиотеки? Спасибо!
Отказ от ответственности : это , а не часто встречающееся "регулирование" - не , желающее ограничить скорость какого-либо пользователя действия или микросервисные звонки.