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 118740 events logged
Services
๐Ÿ“ฆ
Orders ๐Ÿ”’
order.cancelled
29819 events
๐Ÿ’ณ
Payments ๐Ÿ”’
payment.authorized
29803 events
๐Ÿ”
Auth ๐Ÿ“ก
token.refresh
29481 events
๐Ÿ“Š
Inventory ๐Ÿ“ก
stock.restocked
29637 events
NATS
Core via.events.* auth, inventory
JetStream VIAEVENTS 118740 msgs
Durable ui-orders, ui-payments ACK guaranteed
KV viahealth heartbeats
Audit via.events.* 118740 โœ“
Health (KV age)
๐Ÿ“ฆ Orders 0.6s
๐Ÿ“ฆ DOWN
๐Ÿ’ณ Payments 0.6s
๐Ÿ’ณ DOWN
๐Ÿ” Auth 0.6s
๐Ÿ” DOWN
๐Ÿ“Š Inventory 0.6s
๐Ÿ“Š DOWN
Event Stream
๐Ÿ“ฆ order.cancelled $318 05:45:33.434
๐Ÿ’ณ payment.authorized $197 USD 05:45:31.392
๐Ÿ’ณ payment.refunded $247 USD 05:45:30.266
๐Ÿ’ณ payment.refunded $232 USD 05:45:29.136
๐Ÿ’ณ payment.failed $116 USD 05:45:28.319
๐Ÿ“Š stock.restocked SKU-7C52 ร—13 05:45:27.343
๐Ÿ“Š stock.restocked SKU-E3C1 ร—74 05:45:24.945
๐Ÿ“ฆ order.shipped $473 05:45:24.095
๐Ÿ“ฆ order.cancelled $471 05:45:22.658
๐Ÿ“ฆ order.placed $385 05:45:21.109
๐Ÿ” token.refresh user81 05:45:18.916
๐Ÿ“ฆ order.cancelled $48 05:45:17.918
๐Ÿ” login.success user81 05:45:15.842
๐Ÿ” token.refresh user73 05:45:13.872
๐Ÿ“Š stock.restocked SKU-9C22 ร—10 05:45:12.404
๐Ÿ“ฆ order.shipped $495 05:45:09.923
๐Ÿ” token.refresh user18 05:45:09.025
๐Ÿ“ฆ order.cancelled $49 05:45:07.593
๐Ÿ’ณ payment.failed $345 USD 05:45:05.779
๐Ÿ“ฆ order.shipped $89 05:45:04.441
๐Ÿ” token.refresh user51 05:45:02.553
๐Ÿ“ฆ order.cancelled $387 05:45:01.115
๐Ÿ’ณ payment.failed $105 USD 05:44:59.592
๐Ÿ” token.refresh user58 05:44:57.724
๐Ÿ“ฆ order.cancelled $270 05:44:55.652
๐Ÿ“ฆ order.placed $262 05:44:54.525
๐Ÿ’ณ payment.failed $31 USD 05:44:53.315
๐Ÿ” token.refresh user98 05:44:52.351
๐Ÿ“ฆ order.placed $182 05:44:51.049
๐Ÿ“ฆ order.shipped $264 05:44:50.148

๐ŸŽฏ 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.