Необходимо реализовать "напоминания" о событиях с помощью RabbitMQ (кролика). Общая концепция описана в техническом задании.
Порядок выполнения ДЗ:
- установить локально очередь сообщений RabbitMQ (или сразу через Docker, если знаете как);
- создать процесс Планировщик (
scheduler
), который периодически сканирует основную базу данных, выбирая события о которых нужно напомнить:- при запуске процесс должен подключаться к RabbitMQ и создавать все необходимые структуры (топики и пр.) в ней;
- процесс должен выбирать сообытия для которых следует отправить уведомление (у события есть соотв. поле), создавать для каждого Уведомление (описание сущности см. в ТЗ), сериализовать его (например, в JSON) и складывать в очередь;
- процесс должен очищать старые (произошедшие более 1 года назад) события.
- создать процесс Рассыльщик (
sender
), который читает сообщения из очереди и шлёт уведомления; непосредственно отправку делать не нужно - достаточно логировать сообщения / выводить в STDOUT. - настройки подключения к очереди, периодичность запуска и пр. настройки процессов вынести в конфиг проекта;
- работу с кроликом вынести в отдельный пакет, который будут использовать пакеты, реализующие процессы выше.
Процессы не должны зависеть от конкретной реализации RMQ-клиента.
В результате компиляции проекта (make build
) должно получаться 3 отдельных исполняемых файла
(по одному на микросервис):
- API (
calendar
); - Планировщик (
calendar_scheduler
); - Рассыльщик (
calendar_sender
).
Каждый из сервисов должен принимать путь файлу конфигурации:
./calendar --config=/path/to/calendar_config.yaml
./calendar_scheduler --config=/path/to/scheduler_config.yaml
./calendar_sender --config=/path/to/sender_config.yaml
После запуска RabbitMQ и PostgreSQL процессы calendar_scheduler
и calendar_sender
должны запускаться без дополнительных действий.
- Makefile заполнен и пайплайн зеленый - 1 балл
- Работа с RMQ выделена в отдельный пакет, код не дублируется - 1 балл
- Реализован Планировщик:
- отсылает уведомления о выбранных событиях - 2 балла
- удаляет старые события - 1 балл
- Реализован Рассыльщик - 2 балла
- Можно собрать сервисы одной командой (
make build
) - 1 балл - Понятность и чистота кода - до 2 баллов