На этот раз уже не столько про код, сколько про архитектуру.
Нужно было спроектировать интеграцию 1С → Go → Yandex 360 для отправки email и сбора событий почты.
Самое интересное для меня здесь — не сама отправка письма, а то, что происходит вокруг неё: очередь, повторные попытки, падение сервиса, защита от дублей и корреляция событий между 1С, нашим сервисом и Yandex.
Например, если SMTP-запрос завершился таймаутом, нельзя просто отправить письмо ещё раз — сначала нужно понять, не было ли оно уже принято. Для этого предусмотрена дополнительная проверка Yandex.
В результате получилась архитектура, в которой состояние хранится в БД, обработка идёт асинхронно, события собираются отдельно, а падение Go-сервиса не приводит к потере очереди.
Кода не требовалось — основной упор был именно на проектирование решения.
Пожалуй, такие задания мне сейчас даже интереснее обычных CRUD.
Нужно было спроектировать интеграцию 1С → Go → Yandex 360 для отправки email и сбора событий почты.
Самое интересное для меня здесь — не сама отправка письма, а то, что происходит вокруг неё: очередь, повторные попытки, падение сервиса, защита от дублей и корреляция событий между 1С, нашим сервисом и Yandex.
Например, если SMTP-запрос завершился таймаутом, нельзя просто отправить письмо ещё раз — сначала нужно понять, не было ли оно уже принято. Для этого предусмотрена дополнительная проверка Yandex.
В результате получилась архитектура, в которой состояние хранится в БД, обработка идёт асинхронно, события собираются отдельно, а падение Go-сервиса не приводит к потере очереди.
Кода не требовалось — основной упор был именно на проектирование решения.
Пожалуй, такие задания мне сейчас даже интереснее обычных CRUD.