- Запрос отчёта поступает в очередь.
- Приложение читает очередь с буфером определенного размера и записывает запросы в БД.
- Раз в час запускается задача, которая читает первый {smallBatchSize} сообщений из БД, отсортированных по времени запроса.
Она проверяет, нет ли запросов, которые скоро истекают. Если есть, то обрабатывает до тех пор, пока срочные запросы не кончатся. - Раз в день в 23 по МСК запускается задача, которая обрабатывает все накопившиеся запросы по {largeBatchSize} за раз.
- Все сформированные отчеты попадают в БД.
- Пользователь может запросить отчёт по item_id и registration_id, дополнительно указав номер страницы и количество элементов на странице.
- Все ответы кэшируются на одну минуту, чтобы пользователю было сложнее положить БД.
- Также добавлен rate limiter, который по умолчанию разрешает 5 запросов от пользователя раз в 30 секунд.
localhost:5282 ReportsApi/GetReports
{
"item_id": "4",
"registration_id": "212",
"page": {
"elements_per_page": 10,
"page_number": 1
}
}
http://localhost:5281/reports?itemId=4®istrationId=212&page.pageNumber=2&page.elementsPerPage=2