Examples menu

๐Ÿ›ฐ NATS Visualizer

Four simulated microservices publish events over NATS. Watch Core pub/sub, JetStream persistence, and KV health heartbeats update in real time.

OpenSwoole-native NATS client โ€” a thin coroutine-native TCP client replaces third-party NATS libraries that require incompatible event loops. The read loop runs in a dedicated coroutine and yields cooperatively on every recv().
Core pub/sub (best-effort) โ€” Auth and Inventory subscribe via wildcard Core pub/sub (via.events.*). Fire-and-forget: if you kill one of these services its simulator stops and any events published while it is offline are gone forever.
Guaranteed delivery (JetStream durable consumers) โ€” Orders and Payments subscribe via named durable push consumers with explicit ACK. Kill = pause the consumer: the simulator keeps publishing, JetStream buffers un-ACKed messages. Revive = re-subscribe: the burst of missed events arrives immediately.
JetStream persistence โ€” the VIAEVENTS stream captures every message in memory. The durable consumer tracks its last-delivered sequence across subscribe/unsubscribe cycles โ€” a revived subscriber never misses a message.
KV health heartbeats โ€” each service publishes a heartbeat to $KV.viahealth.{service} every 2 s. Guaranteed services always heartbeat (only the consumer is paused); best-effort services stop heartbeating when killed. The health grid reads KV age.
Lazy init โ€” the NATS connection is established on the first page load inside the HTTP coroutine, where coroutine APIs are always safe. A double-init guard (flag set before Coroutine::create()) prevents race conditions.
NATS Connected 103987 events logged
Services
๐Ÿ“ฆ
Orders ๐Ÿ”’
order.cancelled
26260 events
๐Ÿ’ณ
Payments ๐Ÿ”’
payment.authorized
26054 events
๐Ÿ”
Auth ๐Ÿ“ก
token.refresh
25813 events
๐Ÿ“Š
Inventory ๐Ÿ“ก
stock.depleted
25860 events
NATS
Core via.events.* auth, inventory
JetStream VIAEVENTS 103987 msgs
Durable ui-orders, ui-payments ACK guaranteed
KV viahealth heartbeats
Audit via.events.* 103987 โœ“
Health (KV age)
๐Ÿ“ฆ Orders 0.5s
๐Ÿ“ฆ DOWN
๐Ÿ’ณ Payments 0.5s
๐Ÿ’ณ DOWN
๐Ÿ” Auth 0.5s
๐Ÿ” DOWN
๐Ÿ“Š Inventory 0.5s
๐Ÿ“Š DOWN
Event Stream
๐Ÿ“ฆ order.cancelled $425 03:19:36.285
๐Ÿ’ณ payment.authorized $272 USD 03:19:34.754
๐Ÿ“Š stock.depleted SKU-FA1B ร—26 03:19:33.055
๐Ÿ” token.refresh user58 03:19:30.626
๐Ÿ’ณ payment.failed $353 USD 03:19:29.339
๐Ÿ“Š stock.reserved SKU-26BA ร—58 03:19:28.284
๐Ÿ” login.failure user10 03:19:26.274
๐Ÿ” login.failure user21 03:19:24.530
๐Ÿ” token.refresh user43 03:19:22.239
๐Ÿ“ฆ order.placed $86 03:19:20.533
๐Ÿ’ณ payment.authorized $234 USD 03:19:19.629
๐Ÿ” login.success user41 03:19:18.404
๐Ÿ“ฆ order.placed $187 03:19:16.442
๐Ÿ“ฆ order.cancelled $436 03:19:14.994
๐Ÿ“ฆ order.placed $392 03:19:13.125
๐Ÿ” login.success user74 03:19:11.363
๐Ÿ” login.success user73 03:19:10.356
๐Ÿ’ณ payment.failed $386 USD 03:19:08.081
๐Ÿ“ฆ order.cancelled $473 03:19:05.851
๐Ÿ’ณ payment.failed $360 USD 03:19:03.637
๐Ÿ“Š stock.restocked SKU-E4A0 ร—53 03:19:02.155
๐Ÿ“Š stock.restocked SKU-ACA7 ร—90 03:19:00.421
๐Ÿ” login.failure user37 03:18:58.523
๐Ÿ’ณ payment.refunded $207 USD 03:18:56.429
๐Ÿ” token.refresh user80 03:18:55.457
๐Ÿ” token.refresh user15 03:18:53.303
๐Ÿ“ฆ order.placed $10 03:18:51.573
๐Ÿ” login.failure user42 03:18:50.698
๐Ÿ“ฆ order.shipped $14 03:18:49.482
๐Ÿ“ฆ order.cancelled $436 03:18:47.297

๐ŸŽฏ Actions

kill-orders / kill-payments

Pauses the JetStream durable consumer (unsubscribes from the deliver inbox). Simulator keeps publishing; NATS buffers un-ACKed messages. Health tile stays green โ€” the service is still alive, only the consumer is paused.

kill-auth / kill-inventory

Stops the event simulator entirely. Events are silently dropped โ€” Core pub/sub has no persistence. Health tile flips to DOWN after 8 s of silence.

revive-{service} (ร—4)

Guaranteed services: re-subscribes to the deliver inbox; JetStream immediately delivers all buffered events in a burst. Best-effort: restarts the simulator and publishes a fresh KV heartbeat.

๐Ÿ‘ Views

mission_control.html.twig

Flow diagram piping services โ†’ NATS โ†’ browser, service kill/revive cards with delivery-type badges, NATS topology with health tiles, and a live event stream.