## Домашнее задание №14 «Кроликизация Календаря» Необходимо реализовать "напоминания" о событиях с помощью RabbitMQ (кролика). Общая концепция описана в [техническом задании](./CALENDAR.MD). Порядок выполнения ДЗ: * установить локально очередь сообщений RabbitMQ (или сразу через Docker, если знаете как); * создать процесс Планировщик (`scheduler`), который периодически сканирует основную базу данных, выбирая события о которых нужно напомнить: - при запуске процесс должен подключаться к RabbitMQ и создавать все необходимые структуры (топики и пр.) в ней; - процесс должен выбирать сообытия для которых следует отправить уведомление (у события есть соотв. поле), создавать для каждого Уведомление (описание сущности см. в [ТЗ](./CALENDAR.MD)), сериализовать его (например, в JSON) и складывать в очередь; - процесс должен очищать старые (произошедшие более 1 года назад) события. * создать процесс Рассыльщик (`sender`), который читает сообщения из очереди и шлёт уведомления; непосредственно отправку делать не нужно - достаточно логировать сообщения / выводить в STDOUT. * настройки подключения к очереди, периодичность запуска и пр. настройки процессов вынести в конфиг проекта; * работу с кроликом вынести в отдельный пакет, который будут использовать пакеты, реализующие процессы выше. Процессы не должны зависеть от конкретной реализации RMQ-клиента. В результате компиляции проекта (`make build`) должно получаться 3 отдельных исполняемых файла (по одному на микросервис): - API (`calendar`); - Планировщик (`calendar_scheduler`); - Рассыльщик (`calendar_sender`). Каждый из сервисов должен принимать путь файлу конфигурации: ```bash ./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 баллов #### Зачёт от 7 баллов