Server-Sent Events (SSE)
TinyMQ soporta Server-Sent Events (SSE) para streaming de mensajes en tiempo real unidireccional.
Esto es especialmente útil para construir dashboards web o para hacer live-tailing de logs directamente en el navegador, sin la complejidad de los WebSockets.
El endpoint /stream/{topic}
Endpoint: GET /stream/{topic}
Al conectarte a este endpoint, TinyMQ actualiza la petición a text/event-stream y mantiene la conexión abierta (Connection: keep-alive).
Parámetros de consulta
| Parámetro | Tipo | Por defecto | Descripción |
|---|---|---|---|
filter_key | string | (vacío) | Smart Routing: Solo devuelve mensajes con esta clave JSON exacta |
filter_val | string | (vacío) | Smart Routing: Valor a coincidir con filter_key |
Al igual que con WebSockets, las conexiones SSE operan en Spy Mode. Son no destructivas y reciben una copia de cada mensaje publicado en el topic sin eliminarlo del WAL real.
Ejemplo: JavaScript en el navegador
Como SSE es un estándar web nativo, puedes consumirlo directamente usando la API integrada EventSource en cualquier navegador moderno:
const evtSource = new EventSource("http://localhost:7800/stream/my_topic");
evtSource.onmessage = function(event) {
const msg = JSON.parse(event.data);
console.log("New message:", msg.payload_text);
};
evtSource.onerror = function(err) {
console.error("Stream error:", err);
};
Ejemplo: cURL
Puedes usar cURL para hacer live-tail de un topic desde la terminal:
curl -N -H "Accept: text/event-stream" http://localhost:7800/stream/my_topic
Salida:
data: {"id":"uuid...","topic":"my_topic","payload":"...","payload_text":"Hello"}
data: {"id":"uuid...","topic":"my_topic","payload":"...","payload_text":"World"}
El comando tmq tail
El CLI oficial incluye un comando tail que envuelve el endpoint SSE y añade lógica de reconexión automática:
tmq tail my_topic