A Django app that implements the transactional outbox pattern with CloudEvents support, enabling reliable event publishing in distributed systems.
- 🔄 Transactional Broadcaster Pattern: Ensures events are published reliably
- ☁️ CloudEvents Compatible: Follows CloudEvents specification
- 🔌 Multiple Backends: Redis Streams, Kafka, NATS support
- 🔁 Retry Logic: Exponential backoff with configurable retries
- 🔑 Idempotency: Prevents duplicate event processing
- 📊 Monitoring: Built-in metrics and health checks
- 🎯 Event Handlers: Local event processing framework
- 🔧 Admin Interface: Django admin integration
# Using pip
pip install django-broadcaster
# Using uv
uv add django-broadcaster
Add to your Django settings:
INSTALLED_APPS = [
# ... your other apps
'django_broadcaster',
]
OUTBOX_PUBLISHERS = {
'default': {
'BACKEND': 'django_broadcaster.backends.RedisStreamBackend',
'OPTIONS': {
'host': 'localhost',
'port': 6379,
'stream_name': 'events',
}
}
}
from django_broadcaster.publishers import publisher
# Publish an event
event = publisher.publish_event(
event_type='user.created',
source='user-service',
data={'user_id': 123, 'email': 'user@example.com'}
)
# Register event handler
from django_broadcaster.registry import event_registry
@event_registry.register('user.created')
def handle_user_created(event):
print(f"User created: {event.data}")
python manage.py outbox_worker
Full documentation is available at https://django-broadcaster.readthedocs.io/en/latest/.
To build the documentation locally:
# Build the documentation
make docs-build
# Serve the documentation locally at http://localhost:8080
make docs-serve
After running make docs-serve
, you can access the documentation by opening http://localhost:8080 in your web browser.
Contributions are welcome! Please read our Contributing Guide for details.
This project is licensed under the MIT License - see the LICENSE file for details.