Учебный проект для поступления на стажировку в Wildberries, представляющий из себя демонстрационный сервис, отображающий данные о заказе. Сервис принимает поток заказов в формате JSON через брокер сообщений NATS-Streaming и записывает их в базу данных PostgreSQL, а так же in-memory кеш программы. Заказы после получения можно просмотреть через интерфейс на странице localhost:8080 введя uid заказа в поле.
Для запуска проекта необходим запущенный NATS-Streaming server и PostgreSQL.
- В .env файле в прописанные поля следует вписать данные, необходимые для подключения к базе данных PostgreSQL.
- в окне терминала в корне проекта следует ввести команду
go run cmd/subscriber/main.go
которая запустит подписчика NATS-Streaming, кешер, подключение к базе данных и HTTP сервер на localhost:8080. - после этого следует открыть дополнительное окно терминала в корне проекта и ввести команду
go run cmd/publisher/main.go
которая запустит публикации в NATS-Streaming.
Подготовлено 5 корректных сообщений с заказами и одно некорректное для публикации в NATS-Streaming, которые будут отправленны последней командой go run
автоматически.
После отправки сообщений они будут доступны в базе данных PostgreSQL и кеше программы, запущенной первой командой go run
. Просмотреть доступные сообщения кеша можно открыв в браузере адрес localhost:8080
и введя в поле на странице order_uid одного из отправленных заказов.
В случае сбоя и/или при повторном запуске subscriber, сообщения из базы данных будут автоматически загружены в кеш.
В данной реализации кеш является "бессмертным" т.е. хранится в памяти бессрочно. Тем не менее в устройстве кеша предусмотрено автоматическое отслеживание времени жизни элементов в нём и очистка устаревших элементов с установленным интервалом запуска очистки. В дальнейшем возможно дополнение функциональности этими опциями в купе со сверкой актуальности информации в кеше и базе данных
В данный момент добавлены тесты для кода в директории pkg/cache/
. Для их запуска следует выполнить в терминале в директории pkg/cache/
команду go test
или go test -v
для более подробного вывода результатов тестов в окно терминала.
Размещение данного проекта в открытый доступ не нарушает никаких правил так как сдача и проверка решения предусматривает его размещение в открытом репозитории.