feat: notebook 04 — JetStream a fondo + simulador de rendimiento interactivo

JetStream: anatomia de streams (storage/retention/limits), consumers pull durables
con ack y cursor, dedup por Nats-Msg-Id, retencion workqueue, deliver policies.
Simulador: boton ipywidgets que lanza 1 publisher -> N subscribers con miles de
mensajes y grafica en movimiento (acumulado + throughput instantaneo).
This commit is contained in:
Egutierrez
2026-06-03 21:52:38 +02:00
parent 595930f3c8
commit c9e28b8135
12 changed files with 2029 additions and 104 deletions
+26 -17
View File
@@ -1,21 +1,5 @@
{
"cells": [
{
"cell_type": "markdown",
"id": "a5e95055",
"metadata": {},
"source": [
"# NATS pub/sub — 02 · Queue groups, Request/Reply y JetStream\n",
"\n",
"En el notebook 01 vimos el *fan-out* del core: una publicación llega a **todos** los subscribers. Aquí cubrimos tres patrones que construyen sobre esa base:\n",
"\n",
"1. **Queue groups** — repartir la carga: varios *workers* comparten el trabajo y cada mensaje lo procesa **uno solo**.\n",
"2. **Request/Reply** — RPC sobre mensajería: un cliente pregunta y espera la respuesta de un servicio.\n",
"3. **JetStream** — la capa de **persistencia**: streams que almacenan los mensajes y permiten *replay*, a diferencia del core *fire-and-forget*.\n",
"\n",
"> Requiere el broker `nats_demo` del notebook 01. La primera celda lo arranca de forma idempotente, así que este notebook también funciona de forma aislada."
]
},
{
"cell_type": "markdown",
"id": "1ab4e0d1",
@@ -374,6 +358,22 @@
"\n",
"**Siguiente** → `03_procesos_reales.ipynb`: hasta ahora todo ha ocurrido dentro de un mismo kernel. Allí lanzamos publisher y subscribers como **procesos del sistema operativo independientes** para ver el desacople real."
]
},
{
"cell_type": "markdown",
"id": "a5e95055",
"metadata": {},
"source": [
"# NATS pub/sub — 02 · Queue groups, Request/Reply y JetStream\n",
"\n",
"En el notebook 01 vimos el *fan-out* del core: una publicación llega a **todos** los subscribers. Aquí cubrimos tres patrones que construyen sobre esa base:\n",
"\n",
"1. **Queue groups** — repartir la carga: varios *workers* comparten el trabajo y cada mensaje lo procesa **uno solo**.\n",
"2. **Request/Reply** — RPC sobre mensajería: un cliente pregunta y espera la respuesta de un servicio.\n",
"3. **JetStream** — la capa de **persistencia**: streams que almacenan los mensajes y permiten *replay*, a diferencia del core *fire-and-forget*.\n",
"\n",
"> Requiere el broker `nats_demo` del notebook 01. La primera celda lo arranca de forma idempotente, así que este notebook también funciona de forma aislada."
]
}
],
"metadata": {
@@ -383,7 +383,16 @@
"name": "python3"
},
"language_info": {
"name": ""
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.12.3"
}
},
"nbformat": 4,