Минимальный пример системы оповещения на Go с использованием RabbitMQ, docker-compose и простого web-интерфейса.
Функциональность:
- Отправка сообщения через web-интерфейс (
index.html, отдаётся Go-сервером) - REST endpoint
POST /api/sendдля отправки сообщений програмно - Отправка сообщения в RabbitMQ (очередь
notifications) - Консумер RabbitMQ, который читает сообщения из очереди и выводит их в консоль
backend/cmd/api— HTTP API + отдача статики (фронт)backend/cmd/consumer— консумер RabbitMQ, печатает сообщения в консольbackend/internal/rabbitmq— обёртка над RabbitMQ (publisher + consumer-функция)backend/web— простой HTML/JS фронтbackend/Dockerfile— сборка бинарейapiиconsumerdocker-compose.yml— поднимает RabbitMQ, API и консумер
Требования: установлен Docker и docker-compose.
Из корня проекта:
docker-compose up --buildБудут подняты сервисы:
rabbitmq— RabbitMQ + web-интерфейс управленияapi— Go HTTP API + фронтconsumer— консумер, читающий очередьnotifications
Порты:
- Web-интерфейс приложения:
http://localhost:8080 - RabbitMQ management UI:
http://localhost:15672(логин/пароль:guest/guest)
-
Откройте браузер:
http://localhost:8080 -
Введите текст сообщения и нажмите «Отправить».
-
В консоли контейнера
go-consumerвы увидите строки вида:[x] Received: Тестовое оповещениеПосмотреть логи можно, например:
docker-compose logs -f consumer
-
RabbitMQ UI будет доступен по адресу
http://localhost:15672— очередь называетсяnotifications.
Требования: Go (1.22+) и установленный/запущенный RabbitMQ локально.
-
Установите зависимости:
cd backend go mod tidy -
Запустите RabbitMQ локально (по умолчанию
amqp://guest:guest@localhost:5672/). -
В одном терминале запустите HTTP API:
cd backend set RABBITMQ_URL=amqp://guest:guest@localhost:5672/ set HTTP_ADDR=:8080 go run ./cmd/api
На Linux/macOS вместо
setиспользуйте:export RABBITMQ_URL=amqp://guest:guest@localhost:5672/ export HTTP_ADDR=:8080 go run ./cmd/api
-
В другом терминале запустите консумер:
cd backend set RABBITMQ_URL=amqp://guest:guest@localhost:5672/ go run ./cmd/consumer
-
Откройте
http://localhost:8080и отправьте сообщение — оно попадёт в очередь и будет выведено в консоли консюмера.
-
POST
/api/sendТело запроса (JSON):
{ "message": "строка с вашим сообщением" }Ответ при успехе:
{ "status": "ok", "message": "строка с вашим сообщением" }
Код максимально простой и «на коленке», чтобы показать идею интеграции Go + RabbitMQ + web-интерфейс.