Start here
Seven steps, from a first message to observability, in Java, Python, Ruby, .NET
and Go side by side. Each language has an image with its toolchain, the library
and a RabbitMQ inside, so one command runs a step:
docker run --rm -p 15672:15672 ghcr.io/acemq-company/acemq-tutorials-python step 1.
Libraries
JVMJava, Spring Boot
AMQP for Java. Reliable publishing with confirms, retries the broker enforces,
dead-letter and parking queues with replay, streams, pipelines, ordered
consumption, and five serialization formats.
Runnable, self-contained examples for the Java library — each one compiled and
run against a real broker in CI, so none of them rots quietly.
Auto-configuration for the Java library: one connection, a declared topology,
annotated listeners, health and metrics — configured from application.yaml.
Spring Boot 3 and 4 from one artifact, and the auto-configure
module runs on Boot 2.7 as well.
RabbitMQ's HTTP management API for Java: users, vhosts, permissions, policies,
federation and shovels, health checks, definitions export and import, and the
queue facts AMQP cannot report. Deliberately separate from the messaging
library, because nothing on a message path should depend on a
product-specific management endpoint.
A load generator for AMQP brokers: a workload DSL, an open-loop rate schedule
that measures latency against intended send time rather than actual, and a
report that says what it measured rather than what you should conclude.
.NETC#, VB.NET
AMQP for C# and VB.NET from a single assembly, targeting netstandard2.0
so it reaches .NET Framework 4.6.2 as well as .NET Core and modern .NET — the RabbitMQ
transport included. Publishing with confirms, consumers with explicit dispositions,
topology, retries and dead-lettering, tested against a real broker in CI. The envelope
is pinned to Java's by fixtures generated from it rather than copied from its
documentation.
Dependency injection and hosted-service integration for the .NET library:
AddAceMq, a BackgroundService consumer host, and health checks.
Built on AceMQ for .NET 0.7.13.
Go
AMQP for Go, with a core that has no dependencies outside the standard library — the
RabbitMQ transport lives in a subpackage, so a program that only uses the in-memory
broker never links an AMQP client. Publishing, consumers that return their disposition
rather than calling a method, topology, retries and dead-lettering, tested against a
real broker in CI. The envelope is pinned to Java's by the same fixtures the .NET
library uses. Connections recover by themselves, and the five extra codec
formats are modules of their own so the core keeps one dependency.
Dynamic languages
AMQP for Python, pinned to the same envelope as the other libraries by a shared
conformance suite, so a Python consumer reads what a Java producer wrote.
A lifespan that owns the connection and consumers, and dependencies for publishing
from a route. Requires acemq-amqp>=0.7.12.
AMQP for Ruby, held to the same envelope and conformance suite as every other
AceMQ library.
A Railtie, configuration under config.acemq, and a consumer process for
running handlers outside the web server. Requires acemq-amqp ~> 0.7.14.
Using the Java library
<repositories>
<repository>
<id>acemq</id>
<url>https://acemq-company.github.io/maven/</url>
</repository>
</repositories>
<dependency>
<groupId>org.acemq</groupId>
<artifactId>acemq-amqp-core</artifactId>
<version>0.7.15</version>
</dependency>
<dependency>
<groupId>org.acemq</groupId>
<artifactId>acemq-transport-rabbitmq</artifactId>
<version>0.7.15</version>
<scope>runtime</scope>
</dependency>
Both are needed. The transport is discovered at runtime from the
amqp:// scheme in your URL, so your code never compiles against it —
but without it on the classpath a connection fails with
no transport for scheme amqp.
Artifacts
Everything published under org.acemq, with sources and Javadoc, readable
without credentials. Not Maven Central yet: that is permanent, and coordinates are
still settling before 1.0.
A static NuGet v3 feed on the same terms — readable without credentials, and
published by committing rather than pushing. dotnet restore,
dotnet add package and floating versions all work against it;
search does not, because a static host cannot serve that resource.
A static index for the Python library and its integrations, readable without
credentials — point pip at it with --extra-index-url.
A static gem source for the Ruby library and its Rails integration, readable
without credentials — add it as a source in your Gemfile.
Support
Architecture review, production readiness, TLS and permission design, and incident
response for RabbitMQ and for these libraries. The libraries are complete and free to
use without it, and are not crippled to sell it.