198 lines
6.0 KiB
Markdown
198 lines
6.0 KiB
Markdown
# NATS Queue Visualizer
|
||
|
||
Веб-приложение на Go для визуализации содержимого очередей NATS в реальном времени.
|
||
|
||
## Возможности
|
||
|
||
- 🔄 Подписка на NATS subjects/очереди в реальном времени
|
||
- 📊 Веб-интерфейс: продюсер/потребитель по сообщениям, активные подключения к NATS
|
||
- 🔍 Фильтрация по subject и поиск по содержимому
|
||
- 📈 Статистика: количество сообщений, subjects, общий размер
|
||
- 🌐 WebSocket для обновлений в реальном времени
|
||
- 💾 Хранение последних N сообщений в памяти
|
||
|
||
## Требования
|
||
|
||
- Go 1.21 или выше
|
||
- NATS сервер (локальный или удаленный)
|
||
|
||
## Установка
|
||
|
||
1. Клонируйте репозиторий или скачайте файлы
|
||
2. Установите зависимости:
|
||
|
||
```bash
|
||
go mod download
|
||
```
|
||
|
||
## Конфигурация
|
||
|
||
Все настройки приложения находятся в файле `config.yaml`. Создайте этот файл или отредактируйте существующий:
|
||
|
||
```yaml
|
||
# URL NATS сервера
|
||
nats_url: "nats://localhost:4222"
|
||
|
||
# Аутентификация NATS (используйте один из вариантов)
|
||
# Вариант 1: Токен
|
||
# token: "your-token-here"
|
||
|
||
# Вариант 2: Имя пользователя и пароль
|
||
# username: "your-username"
|
||
# password: "your-password"
|
||
|
||
# URL HTTP-мониторинга NATS (порт 8222) — для отображения активных подключений
|
||
# nats_monitor_url: "http://localhost:8222"
|
||
|
||
# Список subjects для подписки (через запятую)
|
||
subjects: ">"
|
||
|
||
# Порт HTTP сервера
|
||
port: "8080"
|
||
|
||
# Максимальное количество сообщений для хранения в памяти
|
||
max_messages: 1000
|
||
```
|
||
|
||
## Использование
|
||
|
||
### Базовое использование
|
||
|
||
```bash
|
||
go run main.go
|
||
```
|
||
|
||
Приложение автоматически загрузит конфигурацию из `config.yaml` в текущей директории.
|
||
|
||
### Использование другого конфигурационного файла
|
||
|
||
```bash
|
||
go run main.go /path/to/custom-config.yaml
|
||
```
|
||
|
||
Можно указать путь к другому конфигурационному файлу в качестве аргумента командной строки.
|
||
|
||
### Примеры subjects
|
||
|
||
- `>` - все subjects
|
||
- `orders.*` - все subjects, начинающиеся с `orders.`
|
||
- `events.>` - все subjects в пространстве имен `events`
|
||
- `orders.created,orders.updated` - конкретные subjects через запятую
|
||
|
||
## Веб-интерфейс
|
||
|
||
Откройте браузер и перейдите на `http://localhost:8080`
|
||
|
||
### Функции интерфейса:
|
||
|
||
1. **Фильтр по subject** - выберите конкретный subject из выпадающего списка
|
||
2. **Поиск** - введите текст для поиска по содержимому сообщений
|
||
3. **Очистить** - удалить все сообщения из памяти (не влияет на NATS)
|
||
4. **Обновить** - перезагрузить все сообщения с сервера
|
||
|
||
### Статистика
|
||
|
||
Интерфейс показывает:
|
||
- Общее количество полученных сообщений
|
||
- Количество уникальных subjects
|
||
- Общий размер всех сообщений в байтах
|
||
|
||
## API Endpoints
|
||
|
||
- `GET /` - веб-интерфейс
|
||
- `GET /api/messages?subject=...` - получить все сообщения (опционально отфильтрованные по subject)
|
||
- `GET /api/subjects` - получить список всех subjects
|
||
- `WS /ws` - WebSocket для получения сообщений в реальном времени
|
||
|
||
## Примеры конфигурации
|
||
|
||
### Аутентификация с токеном
|
||
|
||
```yaml
|
||
nats_url: "nats://nats.example.com:4222"
|
||
token: "your-secret-token"
|
||
subjects: ">"
|
||
port: "8080"
|
||
max_messages: 1000
|
||
```
|
||
|
||
### Аутентификация с username/password
|
||
|
||
```yaml
|
||
nats_url: "nats://nats.example.com:4222"
|
||
username: "myuser"
|
||
password: "mypassword"
|
||
subjects: ">"
|
||
port: "8080"
|
||
max_messages: 1000
|
||
```
|
||
|
||
### Подписка на конкретные subjects
|
||
|
||
Отредактируйте `config.yaml`:
|
||
```yaml
|
||
nats_url: "nats://localhost:4222"
|
||
subjects: "orders.created,orders.updated,orders.deleted"
|
||
port: "8080"
|
||
max_messages: 1000
|
||
```
|
||
|
||
### Подписка на все subjects в пространстве имен
|
||
|
||
```yaml
|
||
subjects: "events.>"
|
||
```
|
||
|
||
### Подключение к удаленному NATS серверу
|
||
|
||
```yaml
|
||
nats_url: "nats://nats.example.com:4222"
|
||
```
|
||
|
||
### Увеличение лимита сообщений
|
||
|
||
```yaml
|
||
max_messages: 5000
|
||
```
|
||
|
||
## Сборка
|
||
|
||
Для создания исполняемого файла:
|
||
|
||
```bash
|
||
go build -o nats-ui main.go
|
||
```
|
||
|
||
Затем запустите:
|
||
|
||
```bash
|
||
./nats-ui
|
||
```
|
||
|
||
Или с указанием конфигурационного файла:
|
||
|
||
```bash
|
||
./nats-ui /path/to/config.yaml
|
||
```
|
||
|
||
## Структура проекта
|
||
|
||
```
|
||
nats-ui/
|
||
├── main.go # Основной код приложения
|
||
├── index.html # Веб-интерфейс
|
||
├── config.yaml # Конфигурационный файл
|
||
├── go.mod # Зависимости Go
|
||
└── README.md # Документация
|
||
```
|
||
|
||
## Зависимости
|
||
|
||
- `github.com/nats-io/nats.go` - клиент NATS
|
||
- `github.com/gorilla/websocket` - WebSocket поддержка
|
||
- `gopkg.in/yaml.v3` - парсер YAML конфигурации
|
||
|
||
## Лицензия
|
||
|
||
MIT
|