Сервис создания задач для различных типов роботов через REST API интерфейс. Трекер активности (Manager) распределяет задачи либо одному роботу, либо всем роботам сразу, а также отслеживает доступность роботов.
- Обработка задач двух типов: SINGLE (выполнение одним роботом) и BROADCAST (выполнение всеми доступными типами роботов)
- Две категории действий: DO_WORK (выполнение работы) и SHUT_DOWN (выключение робота)
- Автоматическое создание менеджером новых роботов нужного типа при необходимости
- Робот выполняет задачи в своем потоке
- Потокобезопасные коллекции для работы в многопоточном окружении
- Планировщик запускает проверку очереди задач каждые 500 мс
- Лог динамически выкладывается на Web UI
| Task Type |
Описание |
| SINGLE |
Назначить задачу одному роботу указанного типа |
| BROADCAST |
Назначить задачу всем роботам каждого типа |
| Action Type |
Поведение |
| DO_WORK |
Выполнить работу. Если нет свободного робота — создать нового |
| SHUT_DOWN |
Выключить робота и удалить его из списка доступных |
| Endpoint |
HTTP Method |
Description |
/api/tasks/broadcast |
POST |
Отправка задачи всем роботам |
/api/tasks/single |
POST |
Отправка задачи одному роботу указанного типа |
/api/logs/stream |
GET |
Подписка на стрим логов |
/api/robots |
GET |
Получение свободных роботов |
-
taskQueue (LinkedBlockingQueue)
Очередь входящих задач
-
robots (EnumMap<Robot.Type, BlockingQueue>)
Отдельная очередь для каждого типа робота
-
availableRobotMap (ConcurrentHashMap<String, Robot>)
Отображение «ключ → робот» для быстрого получения списка доступных роботов
Метод manageWork() с аннотацией @Scheduled(fixedDelay = 500) выполняется каждые 500 мс. Он:
- Проверяет наличие задач в
taskQueue
- Извлекает задачу и, в зависимости от её типа (SINGLE или BROADCAST), направляет в соответствующий обработчик
- Выполнить в корне проекта:
- Перейти на Web UI
http://localhost:8080/tasks
- Java 21
- Spring Boot
- Maven