Skip to main content

Django RabbitMQ Wrappers & Tools over Pika

Project description

Logo

License: MIT Ruff pyrefly PyPI PyPI pyversions PyPI djversions PyPI status PyPI - Downloads PyPI - Types Tests


RabbitMQ Support


Documentation: https://django-rmq.rdd-lab.com/

Source Code: https://github.com/RDDLab/Django-RMQ


Django-RMQ

Django-RMQ provides RabbitMQ wrappers and tools for Django projects, built on top of Pika. It is a lightweight integration layer — not a task queue or a Celery replacement — for projects that need to publish and consume messages while keeping broker infrastructure code predictable and close to the Django configuration. Supports RabbitMQ 3.13–4.3.

Features

  • Django-native settings — configure broker connections via RABBITMQ_CONNECTIONS in settings.py, one entry per alias.
  • Producer and Consumer wrappers — thin classes over Pika's blocking connection that handle channel lifecycle and lazy queue declaration.
  • Decorator-style publishing — use a Producer instance as a @producer decorator to auto-publish a function's return value.
  • Reliable delivery — publisher confirms, mandatory=True, and delivery_mode=2 (persistent) are enforced on every message.
  • Auto-reconnect with backoff — producers retry once on transient channel errors; consumers reconnect with exponential backoff capped at a configurable maximum.
  • Dead-letter routing — declare queues with QueueConfig(dead_letter_exchange=...) so unhandled messages are nacked without requeue and routed to a DLX.
  • Management commandssetup_rabbitmq_topology (idempotent exchange/queue/binding setup) and start_consumers (threaded runner with graceful SIGTERM/SIGINT shutdown).
  • Multiple connections — configure several broker aliases and select per producer/consumer via using=.
  • Fully typed — ships py.typed; compatible with pyrefly and standard type checkers.

Installation

pip install django-rmq

Add 'django_rmq' to INSTALLED_APPS and configure at least one connection alias:

INSTALLED_APPS = [
    # ...
    'django_rmq',
]

RABBITMQ_CONNECTIONS = {
    'default': {
        'HOST': 'localhost',
        'PORT': 5672,
        'VIRTUAL_HOST': '/',
        'USER': 'guest',
        'PASSWORD': 'guest',
        'HEARTBEAT': 600,
        'BLOCKED_CONNECTION_TIMEOUT': 300,
        'RECONNECT_INITIAL_BACKOFF': 1.0,
        'RECONNECT_MAX_BACKOFF': 30.0,
    },
}

Quick start

Publish a message:

from django_rmq.producer import Producer

Producer(queue='orders').publish(body='{"order_id": 42}')

Consume messages (e.g. myapp/consumers.py):

from pika.adapters.blocking_connection import BlockingChannel
from pika.spec import Basic, BasicProperties

from django_rmq.consumer import Consumer
from django_rmq.registries.registry import get_consumers_registry

consumer: Consumer = Consumer(queue='orders')


@consumer
def handle_order(
    ch: BlockingChannel,
    method: Basic.Deliver,
    props: BasicProperties,
    body: bytes,
) -> None:
    print(body)
    ch.basic_ack(delivery_tag=method.delivery_tag)


get_consumers_registry().register(consumer=consumer)

Import consumers.py inside your app's AppConfig.ready(), then start consuming:

uv run python manage.py start_consumers

Documentation

Full reference, configuration guide, reliability details, and more:

https://django-rmq.rdd-lab.com/


Testing

Unit tests

Unit tests mock pika and need no broker. They run by default — integration tests are marked integration and deselected:

uv run pytest

Integration tests

Integration tests run against a real RabbitMQ broker. The repo ships a .github/docker-compose.yml that starts the same image CI uses (with the management plugin the suite needs on port 15672). Connection params are read from RMQ_* env vars (defaults: localhost:5672, guest/guest, vhost /), which already match the Compose service:

docker compose -f .github/docker-compose.yml up -d --wait    # start the broker, block until healthy
uv run pytest -m integration
docker compose -f .github/docker-compose.yml down            # stop it when done

The suite isolates itself with per-test uuid-suffixed queues/exchanges and cleans them up, so it is safe against a shared broker (use a dedicated vhost).


License

MIT

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

django_rmq-1.0.2.tar.gz (30.6 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

django_rmq-1.0.2-py3-none-any.whl (28.0 kB view details)

Uploaded Python 3

File details

Details for the file django_rmq-1.0.2.tar.gz.

File metadata

  • Download URL: django_rmq-1.0.2.tar.gz
  • Upload date:
  • Size: 30.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for django_rmq-1.0.2.tar.gz
Algorithm Hash digest
SHA256 ec2328b1efa389f143945cddbc7112a23c5e8aa9b2db23d6ded155d97a07fbfb
MD5 e46c52fef0712a2ede70548f0c66ef95
BLAKE2b-256 e321d55946a66a32466f36a02cb59d0b889c2760c2174037a3a41eea21c85f09

See more details on using hashes here.

Provenance

The following attestation bundles were made for django_rmq-1.0.2.tar.gz:

Publisher: publish.yml on RDDLab/Django-RMQ

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file django_rmq-1.0.2-py3-none-any.whl.

File metadata

  • Download URL: django_rmq-1.0.2-py3-none-any.whl
  • Upload date:
  • Size: 28.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for django_rmq-1.0.2-py3-none-any.whl
Algorithm Hash digest
SHA256 fd6ee77b7ba859c0162230eecad33d0aa52d57575cde8c97b1c2a4f65e4a0fcd
MD5 778c72006d0b757221720480e51661ff
BLAKE2b-256 fe2d1eb889f515ff49afbf41f47ac511af2a20d3c00b10e001ddf11a6848f53f

See more details on using hashes here.

Provenance

The following attestation bundles were made for django_rmq-1.0.2-py3-none-any.whl:

Publisher: publish.yml on RDDLab/Django-RMQ

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page