STOMP.js предоставляет встроенные механизмы отладки, позволяющие
отслеживать внутренние события протокола STOMP, контролировать обмен
кадрами (frames), диагностировать проблемы соединения и анализировать
поведение брокера сообщений. Debug-режим в библиотеке не является
отдельным модулем, а реализуется через конфигурационные параметры
клиента, прежде всего через функцию логирования debug.
В основе отладочного режима лежит передача пользовательской функции в
параметр debug при создании клиента. Эта функция вызывается
библиотекой каждый раз, когда необходимо вывести диагностическую
информацию.
Фактически STOMP.js не навязывает формат логирования. Вместо этого разработчик получает полный контроль над тем, как обрабатывать сообщения отладки: вывод в консоль, отправка в удалённый лог-сервис, буферизация или полное подавление.
Ключевой принцип заключается в том, что debug-режим активируется только при наличии обработчика. Если функция не задана, библиотека работает в «тихом» режиме без диагностического вывода.
Инициализация клиента STOMP.js с включённой отладкой выполняется через объект конфигурации:
import { Client } from '@stomp/stompjs';
const client = new Client({
brokerURL: 'ws://localhost:15674/ws',
debug: function (str) {
console.log('[STOMP]', str);
}
});
В данном примере каждая внутренняя операция STOMP.js будет
сопровождаться вызовом функции debug, а строка с
диагностикой будет выводиться в консоль.
Функция debug получает строку, содержащую информацию о
внутренних событиях: подключение, отправка кадров, подтверждения, ошибки
парсинга, состояния heartbeat и переподключения.
Сообщения, поступающие в debug-обработчик, не имеют строго фиксированного формата, однако содержат структурированную информацию, удобную для анализа. Обычно они включают:
Пример типичных сообщений:
>>> CONNECT
accept-version:1.2
heart-beat:10000,10000
<<< CONNECTED
version:1.2
heart-beat:0,0
Такая структура позволяет отслеживать полный жизненный цикл соединения.
Debug-функция может использоваться не только для вывода строк, но и для расширенного анализа. Часто применяется обёртка, добавляющая временные метки и уровни логирования:
const client = new Client({
brokerURL: 'ws://localhost:15674/ws',
debug: (msg) => {
const timestamp = new Date().toISOString();
console.log(`${timestamp} STOMP DEBUG: ${msg}`);
}
});
Это позволяет синхронизировать события STOMP с другими логами системы и упрощает диагностику асинхронных ошибок.
Отключение отладки достигается простым удалением обработчика или передачей пустой функции:
const client = new Client({
brokerURL: 'ws://localhost:15674/ws',
debug: () => {}
});
При таком подходе библиотека продолжает формировать диагностические строки, но они не обрабатываются и фактически игнорируются.
Некоторые реализации предпочитают условное включение debug-режима через переменные окружения:
const isDebug = true;
const client = new Client({
brokerURL: 'ws://localhost:15674/ws',
debug: isDebug ? (msg) => console.log(msg) : () => {}
});
Отладочный режим наиболее полезен при анализе жизненного цикла STOMP-соединения. В логах можно наблюдать последовательность событий:
Каждый этап фиксируется через debug-вывод, что позволяет точно определить момент возникновения ошибки.
STOMP.js поддерживает механизм heartbeat, который также отображается в debug-логах. При включённой диагностике можно наблюдать обмен контрольными сигналами:
heart-beat send: 10000
heart-beat receive: 10000
Если heartbeat нарушается, в debug-выводе появляются сообщения о таймаутах и разрывах соединения. Это особенно важно при работе через нестабильные WebSocket-соединения или прокси-серверы.
Debug-режим позволяет различать направление STOMP-кадров:
>>> — исходящие кадры (от клиента к
брокеру)<<< — входящие кадры (от брокера к
клиенту)Пример отправки сообщения:
>>> SEND
destination:/queue/orders
content-length:13
Hello STOMP
Пример получения сообщения:
<<< MESSAGE
destination:/queue/orders
message-id:001
Hello STOMP
Такое разделение критично при отладке очередей и маршрутизации сообщений.
Ошибки протокола STOMP также поступают в debug-обработчик. Это могут быть:
Пример:
<<< ERROR
message:Malformed frame received
content-type:text/plain
При этом debug-режим не заменяет обработчик
onStompError, но позволяет получить дополнительный
контекст.
Функция debug может использоваться как точка интеграции
с системами мониторинга. Вместо console.log данные могут отправляться в
централизованные системы:
const client = new Client({
brokerURL: 'ws://localhost:15674/ws',
debug: (msg) => {
fetch('/logs', {
method: 'POST',
body: JSON.stringify({ message: msg })
});
}
});
Такая схема позволяет собирать телеметрию работы STOMP-клиентов в распределённых системах.
Следует учитывать, что активный debug-режим увеличивает нагрузку на приложение. Причины:
debugВ высоконагруженных системах debug рекомендуется отключать или ограничивать выборочной фильтрацией сообщений.
Для уменьшения объёма логов может использоваться фильтрация:
const client = new Client({
brokerURL: 'ws://localhost:15674/ws',
debug: (msg) => {
if (msg.includes('ERROR') || msg.includes('CONNECTED')) {
console.log(msg);
}
}
});
Такой подход позволяет сосредоточиться на критических событиях, исключая шум от heartbeat и технических кадров.
Поведение debug-режима может отличаться в зависимости от среды выполнения:
STOMP.js не накладывает ограничений на среду, поэтому debug-обработчик полностью определяется архитектурой приложения.
Поскольку STOMP.js работает поверх WebSocket, события приходят асинхронно. Debug-логирование фиксирует эти события в реальном времени, что делает возможным анализ гонок, задержек и нарушений порядка сообщений.
При корректной интерпретации логов можно выявить:
Такая информация критична при разработке систем реального времени, использующих STOMP поверх брокеров сообщений вроде ActiveMQ, RabbitMQ или Artemis.