Задача проекта состоит в развертывании локального сервера PostgreSQL создании базы данных и настройке пользователя. Также требуется создать таблицы для хранения полученных данных.
Сервис представляет собой подключение и подписку на канал в Nats Streaming Server. Полученные данные записываются в базу данных PostgreSQL и сохраняются в памяти сервиса в виде кэша. В случае аварийного завершения работы сервиса, кэш восстанавливается из базы данных. Также необходимо развернуть HTTP-сервер, который будет предоставлять данные по их идентификатору из кэша. Требуется создать простой интерфейс отображения полученных данных для возможности запроса по идентификатору.
Компонент Producer отвечает за публикацию данных в Nats Streaming Server. Фактически, он выполняет функции стороннего сервиса, который отправляет заказы в формате JSON.
Компонент Subscriber обрабатывает данные, полученные из Nats Streaming Server, и добавляет их в базу данных, а также сохраняет их в памяти в виде кэша. По запросу он может отправлять заказы в пользовательский интерфейс.
Пакет Cache отвечает за реализацию кэша и хранение данных в памяти сервиса.
Пакет Config отвечает за загрузку конфигурации для Producer и Consumer.
Пакет Model содержит структуру заказа.
Пакет Storage отвечает за работу с базой данных.
Пакет Template содержит HTML-страницу для отображения полученных данных.
- Producer и Subscriber работают независимо друг от друга. Если Subscriber остановился по какой-то причине, а Producer в это время отправил новые данные в Nats Streaming Server, Subscriber все равно получит эти данные при запуске.
- Если Subscriber прекратил работу, то при следующем запуске он загрузит ранее полученные данные в кэш из базы данных.
- Nats Streaming Server и Postgres поднимаются локально в докере при помощи команды
docker compose up
, после чего уже запускаются producer и subcriber