All notable changes to Django-RMQ are documented in this file.
- RabbitMQ cluster support — an alias can now define multiple broker nodes via the new NODES key (list of {HOST, PORT}); pika iterates the nodes for client-side failover. Credentials, virtual host, and timeouts are shared across nodes. The legacy scalar HOST/PORT form still works and is treated as a single node.
- SHUFFLE_NODES (optional, default False) — reshuffles the node order on every connection attempt so clients spread across the cluster.
- Queue type support —
QueueConfiggained a new optionalqueue_typefield, backed by a newQueueTypeenum (classic/quorum/stream, indjango_rmq/queues/queue_config.py). It sets thex-queue-typedeclaration argument; when left asNone(the default), the broker applies its owndefault_queue_type. Fully backward compatible — no producer or consumer changes required.
- Cluster integration tests — a committed three-node RabbitMQ cluster (
.github/docker-compose.cluster.yml, classic_config peer discovery, shared Erlang cookie,default_queue_type = quorum) backs a newtests/integration/test_cluster.pysuite, marked with the newclustermarker (run viapytest -m cluster). Covers a dead node being skipped in theNODESlist,SHUFFLE_NODESspreading connections across nodes, and the headline scenario — a producer/consumer failing over to a surviving node afterdocker killtakes down the one they were connected to. Cluster tests auto-skip (require_cluster) when fewer than two nodes are reachable, so a single-broker environment is unaffected. CI runs them in a new dedicatedcluster-testjob; the existing integration job now runspytest -m "integration and not cluster".
- Configuration validation — NODES and HOST/PORT are mutually exclusive; empty NODES, a node missing HOST/PORT, or specifying neither form now raises ImproperlyConfigured (see django_rmq/apps.py._resolve_nodes).
- New "Clusters" guide (EN/RU) covering client-side failover, NODES vs load balancer/DNS, SHUFFLE_NODES, reconnect interaction, and quorum queues. Configuration guide updated with NODES/SHUFFLE_NODES and the new validation error cases.
- Testing guide (EN/RU) documents the cluster integration tests — how to bring up the three-node cluster, run
pytest -m cluster, and what each test covers. Clusters guide links to it. - API reference, Topology, and Clusters guides (EN/RU) updated for
queue_type/QueueType. The Clusters guide's "Quorum queues" section is rewritten to recommend declaring quorum queues viaQueueConfig(queue_type=QueueType.QUORUM), with the raw setup-function approach kept as a lower-level alternative. - Documentation versioning — the VuePress site now serves versioned docs under
/{en,ru}/1.0.5/(current) and/{en,ru}/1.0.4/(frozen snapshot from the1.0.4tag)./en/and/ru/redirect to the latest version, and a "Version" dropdown in the navbar switches between them. The 1.0.4 sidebar omits the Clusters guide, which did not exist in that release.
1.0.4 — 2026-07-11
- Consumer — guard
basic_nackagainst a missing delivery tag: when a handler raises, the message is only nacked ifmethod.delivery_tagis set, avoiding an invalid nack withdelivery_tag=None.
- Topology setup — the
RecordingChannelproxy used bysetup_rabbitmq_topologynow exposes explicit, fully typed keyword parameters (passive,durable,auto_delete,internal,exclusive,arguments, …) onexchange_declare/queue_declare/queue_bind, mirroring Pika'sBlockingChannelinstead of accepting**kwargs. Setup functions get proper type checking and the overrides are now LSP-consistent.
1.0.3 — 2026-07-08
check_rabbitmq_connections— healthcheck command that verifies RabbitMQ connectivity by opening and immediately closing a connection per alias. Pass--using <alias>to check a single connection, or omit it to check every alias inRABBITMQ_CONNECTIONS. Reports each alias as OK/FAIL and exits with aCommandErrorif any connection is unreachable.
- Documented
check_rabbitmq_connectionsin the English and Russian management-commands guides.
1.0.2 — 2026-07-05
First production-ready release of Django-RMQ — a set of Django wrappers and tools for RabbitMQ built on top of Pika.
- Producer (
django_rmq.producer) — publish messages to RabbitMQ with publisher confirms and reconnection handling. - Consumer (
django_rmq.consumer) — long-running message consumers with acknowledgement control and graceful shutdown. - Connection manager (
RabbitMQConnectionManager) — centralized connection lifecycle management over Pika. - Registries —
ConsumersRegistryandSetupRegistryfor declaratively registering consumers and topology setup routines. - Multiple connections — run producers/consumers against several RabbitMQ brokers from a single project.
setup_rabbitmq_topology— declaratively create exchanges, queues, and bindings from your configuration (replaces the earliersetup_rabbitmq).start_consumers— boot registered consumers as a manageable process.- Styled command output ("mega-RDD" formatting) with shared
base_rdd_commandbase class and ASCII-art banners.
- The package ships
py.typedand is a PEP 561 typed package — downstream code gets full type information. - Strict type checking with pyrefly (
preset = "strict"); all typing issues across the codebase resolved. - Bundled
pika-stubsso Pika calls are typed out of the box.
- Ruff adopted for linting and formatting.
- Unit and integration test suites (
pytest,pytest-django,pytest-cov); integration tests run against a real broker and are deselected by default via theintegrationmarker. - GitHub Actions workflows for testing, linting, and PyPI publishing on release.
- Full VuePress documentation portal in English and Russian: getting started, configuration, producers, consumers, registries, topology, reliability, multiple connections, management commands, testing, and a complete API reference.
- Expanded
README.mdwith project logo and badges.
- Supports Python 3.10–3.14 and Django 4.2 / 5.0 / 5.1 / 5.2 / 6.0.
- Requires
pika>=1.4.1,<2.0.