Build1 publisher3 min readPublished
RocketMQ-Rust 1.0 reimplements RocketMQ's server, client and admin tools in Rust
RocketMQ-Rust published v1.0.0 on October 1, 2026, with NameServer, Controller, Broker, Proxy, a Rust client and admin tools as core components. It is a community distribution outside the Apache Software Foundation, so its failure paths need their own tests before it carries business-critical messages.
The Engineer · Build desk
Drafted by a language model from the sources cited here and checked against its claim ledger before publication. How we use AISend a correction

What happened
- NameServer handles discovery only: Brokers register addresses and topic routes there, and it neither stores message bodies nor forwards producer traffic.
- Dashboard Web, MCP and SRE components ship as separate packages whose standalone APIs sit outside the core 1.0 compatibility surface.
- The release notes warn that a source release does not mean every registry artifact is live, and point readers to the asynchronous package and image publishing workflows.
- The live documentation site still labels its docs "1.0.0 (development)" even though the tagged v1.0.0 release is published.
Compiled by The EngineerSomething wrong?How this is made
Why it matters
- constraint Teams that build on the dashboard, MCP or SRE pieces take on APIs the 1.0 compatibility promise does not cover, so upgrades to those parts need separate checks.
- cost Release-day deploys that pull packages or images by version can fail until the asynchronous publishing jobs finish, and someone has to confirm each artifact exists before rollout.
- decision Operators cannot carry Apache RocketMQ's release process and support expectations over to this project, so they have to judge the community codebase's own support boundaries before adopting it.
A walkthrough of the project published on dev.to builds its evaluation around one order event and asks: "What happens if the response disappears, the consumer restarts, or a database update succeeds just before progress is saved?" [16] Each of those windows sits at a specific step in the design.
On the direct path, the Broker owns nearly everything after discovery. It validates requests, holds topic and consumer-group metadata, and owns storage. The Store runs inside the Broker's boundary, so there is no separate storage server to launch [9]. Proxy exposes the v2 gRPC MessagingService and Controller handles Broker metadata, master election and replicas, but neither is a required hop between client and Broker [12]. Proxy can also compose an embedded Broker [12]. That is handy on a laptop, and it is one more topology to rule out when a test misbehaves.
Start with the send. The producer takes a writable queue from its route and sends the request. The transport layer handles connection, framing, admission and the request deadline [13]. After acceptance, the storage path appends the record and then returns an outcome that the Broker maps into the producer's response [14]. A deadline that expires between the append and the response leaves a stored message and a producer that saw a failure. If the producer retries, the same event can be stored twice [1]. The test is to drop or delay responses after the append and count what reaches the consumer.
Ordering matters for assertions too. Background work builds the structures used to find messages for consumption and queries, and the response and every read view need not advance together [14]. A test that sends and reads back immediately can fail with no bug present. Assertions need a bounded wait.
The consumer window is where I would spend the most test time. The consumer obtains messages, the application does its work, and recording progress is a separate step whose semantics depend on the consumption model [15]. The Broker does not automatically fold the application's database transaction into its own storage operation [10]. A consumer that commits to its database and dies before recording progress has finished work the Broker never saw finish. After a restart, the message can be delivered again [2]. Killing the process in that gap, under each consumption model in use, shows whether the handler is idempotent against its own database.
Health checks will not surface this. According to the walkthrough, a healthy discovery endpoint can return an address the application cannot reach, and a successful Broker connection says little about whether the consumer's database update completed [11].
The release itself is careful engineering. It sets explicit boundaries for runtime ownership, errors, transport, storage, security and observability [3]. I think that is the right priority for a 1.0 of a rewritten broker, because each named boundary is a place a failure test can target. The walkthrough advises running reproducible experiments against the tagged source and its matching documentation [17]. The release description and the walkthrough's architecture sections do not report duplicate counts or recovery times from forcing these failures.
What to watch
- Whether the asynchronous package and image publishing workflows finish for every v1.0.0 artifact, which decides whether teams can deploy from registries or must build from the tagged source.
- Published failure-injection results against the tagged v1.0.0 build, such as duplicate counts after dropped producer responses and redelivery after consumer restarts.
- Whether the live documentation drops its "(development)" label and converges with the tagged 1.0.0 docs.