Research 014: the bus on NATS — decide now, build in the lab, cut over once after the core #89

Merged
jschoubben merged 2 commits from research/014-nats into main 2026-09-23 21:15:23 +00:00
Owner

The operator wants the AMQP broker replaced by NATS, and asked whether to finish the migration on AMQP first or go to NATS directly.

Measured: AMQP is spoken in three places of the mesh's own code (the controller's and host's link packages, the tool runtime's client) and in none of the sdk or the modules — the sdk's Broker contract names no protocol, by ADR 0039's design. The predecessor's world is AMQP and retiring module by module; it cannot move to NATS and does not need to.

NATS answers every guarantee the bus relies on — subjects, native request/reply, queue groups, TLS, per-subject account permissions (stronger than today's scoping), MQTT — with durability, hold-unacked-and-retry and catch-up moving to JetStream. The cost is the mesh's nervous system: link packages rewritten, a nats module taking the mesh-broker seat, beds re-run, eight decisions amended. Weeks, and never halfway on a live mesh.

Recommended: decide NATS now, build it in the lab in parallel, cut the mesh's bus over in one rehearsed rollout after the core is migrated. "Everything on AMQP first" is already the state and costs nothing more; "NATS first" stalls the migration and changes the bus under a half-migrated node. The adopted AMQP broker becomes the predecessor's compatibility broker with an end date.

The operator wants the AMQP broker replaced by NATS, and asked whether to finish the migration on AMQP first or go to NATS directly. Measured: AMQP is spoken in three places of the mesh's own code (the controller's and host's link packages, the tool runtime's client) and in none of the sdk or the modules — the sdk's `Broker` contract names no protocol, by ADR 0039's design. The predecessor's world is AMQP and retiring module by module; it cannot move to NATS and does not need to. NATS answers every guarantee the bus relies on — subjects, native request/reply, queue groups, TLS, per-subject account permissions (stronger than today's scoping), MQTT — with durability, hold-unacked-and-retry and catch-up moving to JetStream. The cost is the mesh's nervous system: link packages rewritten, a `nats` module taking the `mesh-broker` seat, beds re-run, eight decisions amended. Weeks, and never halfway on a live mesh. Recommended: **decide NATS now, build it in the lab in parallel, cut the mesh's bus over in one rehearsed rollout after the core is migrated.** "Everything on AMQP first" is already the state and costs nothing more; "NATS first" stalls the migration and changes the bus under a half-migrated node. The adopted AMQP broker becomes the predecessor's compatibility broker with an end date.
jschoubben added 2 commits 2026-09-23 21:15:17 +00:00
Measured: AMQP is spoken in three places of the mesh's own code and in none of the
sdk or the modules; the predecessor's world is AMQP and retiring. NATS answers every
guarantee the bus relies on, durability via JetStream. Recommended: not underneath
the migration, not after it either — in parallel, one rehearsed rollout.
jschoubben merged commit 2445d80565 into main 2026-09-23 21:15:23 +00:00
jschoubben deleted branch research/014-nats 2026-09-23 21:15:23 +00:00
Sign in to join this conversation.
No Reviewers
No labels
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: novox/hq#89