Задание:

  • Написать spring-boot приложение, которое будет содержать 1 контроллер с одним методом, который возвращает HTTP 200 и пустое тело.

  • Написать функционал, который будет ограничивать количество запросов с одного IP адреса на этот метод в размере N штук в X минут. Если количество запросов больше, то должен возвращаться 502 код ошибки, до тех пор, пока количество обращений за заданный интервал не станет ниже N.

    Должна быть возможность настройки этих двух параметров через конфигурационный файл.

  • Сделать так, чтобы это ограничение можно было применять быстро к новым методам и не только к контроллерам, а также к методам классов сервисного слоя.

Реализация должна учитывать многопоточную высоконагруженную среду исполнения и потреблять как можно меньше ресурсов (важно!).

  • Также написать простой JUnit-тест, который будет эмулировать работу параллельных запросов с разных IP. !!! Не использовать сторонних библиотек для троттлинга.

Список технологий и инструментов: Код должен быть описан на Java 11 (или выше) Фреймворки: Spring + Spring Boot Для сборки использовать Gradle. Возможны другие вспомогательные библиотеки.

-Написать JUnit тест с использованием JUnit 5.x (Junit Jupiter)

  • Написать простой dockerfile для обёртки данного приложения в докер

Запуск с помощью Dockerfile (App) Запускаем терминал в папке с приложением:

  • Собираем jar архив с spring webflux приложением:
  • ./gradlew build
  • Создать образ из Dockerfile - запустить:
  • docker build --tag=app:latest .
  • Запускаем Docker контейнер из образа на порту 8080:
  • docker run --rm -p8080:8080 -it app
  • Проверяем c помощью postman: http://localhost:8080/amzscout
  • curl --location 'http://127.0.0.1:8080/amzscout'
  • Выход из приложения и автоматическое удаление Docker контейнера:
  • в терминале нажать "Ctrl+C"
  • file 2023-06-23 в 23.25.55.png