Learn AceMQ, in any language
AceMQ is a family of messaging libraries for RabbitMQ — for Java, Python, Ruby, .NET and Go — that teach the same ideas in the same order: publish with a confirm, retry without blocking, dead-letter and replay, never process twice, call and reply, keep a log, and see what happened.
This is the one place to start. It is a path of seven steps; each step runs in all five languages, with one command and nothing installed but Docker:
docker run --rm -p 15672:15672 ghcr.io/acemq-company/acemq-tutorials-python:0.7.12 step 1The image carries the toolchain, the library at a released version,
the tutorial code and a RabbitMQ broker. While a step runs, the broker's
management UI is at http://localhost:15672 (guest/guest).
Swap python for java, ruby,
dotnet or go; the
images lists every tag.
The path
| Step | What you learn | |
|---|---|---|
| 1 | Your first message | Connect, declare, publish with a confirm, consume, acknowledge. |
| 2 | Never processing twice | Redelivery is normal; an idempotent consumer makes it harmless. |
| 3 | Surviving failure | A retry ladder that does not block the queue, dead letters, and replaying them. |
| 4 | Request and reply | A call over the broker with a correlation id, a reply queue and a timeout. |
| 5 | Streams | An append-only log you can read from any offset, and read again. |
| 6 | Outbox, saga and scheduler | Publish and commit together, compensate a multi-step workflow, deliver later. |
| 7 | Seeing what happens | Metrics, health and traces, and reading them when something is wrong. |
Each step page shows the five languages side by side, links each example at the exact commit the image was built from, and points to that library's own tutorial and guide. Nothing here is a second copy of either: the examples live in each library's examples repository, where CI runs every one of them against a real broker, and the prose lives in each library's documentation.
Inside an image
docker run --rm ghcr.io/acemq-company/acemq-tutorials-go:0.9.9 # list the steps
docker run --rm -p 15672:15672 ghcr.io/acemq-company/acemq-tutorials-go:0.9.9 step 3 --keep
docker run --rm -it ghcr.io/acemq-company/acemq-tutorials-go:0.9.9 shell # a shell, broker running
docker run --rm -p 5672:5672 -p 15672:15672 ghcr.io/acemq-company/acemq-tutorials-go:0.9.9 brokershell opens a shell in the examples checkout with the
toolchain on the PATH and the broker running, so you can
change an example and run it again. broker is the broker
alone, for pointing your own code at.
Where to go next
Every library has a site of its own, with the full guide and a set of tutorials that go further than the path does: Java, Python, Ruby, .NET and Go. The examples repositories have many more examples than the path uses — topology as data, codecs, encryption, claim checks, consumer groups, graceful shutdown — and three small applications each.