Можно использовать только библиотеку php-amqplib. Фреймворки запрещены. Библиотеки для подключения к базам запрещены.
Все должно быть завернуто в docker для быстрого запуска и проверки вашего решения.
- Создать массив из 10 URLs
- Отправить по очереди каждый элемент массива с задержкой от 5 до 30 секунд в RabbitMq.
- В очереди запросить этот url и получить длину контента. Сохранить их в MariaDB и ClickHouse. Допускаются репликации.
- Сделать запрос с использованием PHP к MariaDB и ClickHouse на выборку. Сгруппировать по минуте все строки. Результат должен содержать следующие данные:
- Вывести сколько строк за минуту
- Вывести минуту группировки
- Вывести среднюю длину контента
- Вывести когда было сохранено первое сообщение в минуте и последнее
Весь код выложить на GitHub. ZIP архивы не допускаются. Можно задавать уточняющие вопросы. Если вы не можете выполнить какой то из этапов то опишите причину.
- выкачать проект при помощи команды
git clone
- перейти в корень репозитария и запустить связку контейнеров командой
docker compose up -d
- Зайти в контейнер php при помощи команды
docker exec -ti [имя контенера php] sh
. и внутри установить покеты php при помощи командыcomposer i
- Далее можно перейти в браузер по адресу контейнера SwaggerUI и потестить доступный функционал ... Для упрощения реализации все запросы работают через get
Данное тестовое задание было реализоано на сборке docker-compose состоящей из 7 контейнеров. После запуска докера в браузере можно посмотреть/потыкать следующие контейнера:
- nginx - основной сервер проекта ..
- RabbitMQ - сервер брокера сообщений RabbitMQ/ с админкой. Доступ внутрь = логин: user, пароль: pass
- Swagger UI - тут можно потыкать вживую реализацию проекта
- Adminer - обзор базы mysql Можно зайти на сервер базы данных. Доступ: сервер: db; логин: root; пароль: test