Configuration

Django Dispatch provides several configuration options that can be set in your Django settings file.

Basic Configuration

At a minimum, you need to configure at least one publisher backend:

OUTBOX_PUBLISHERS = {
    'default': {
        'BACKEND': 'django_broadcaster.backends.RedisStreamBackend',
        'OPTIONS': {
            'host': 'localhost',
            'port': 6379,
            'stream_name': 'events',
        }
    }
}

Multiple Backends

You can configure multiple backends for different types of events:

OUTBOX_PUBLISHERS = {
    'default': {
        'BACKEND': 'django_broadcaster.backends.RedisStreamBackend',
        'OPTIONS': {
            'host': 'localhost',
            'port': 6379,
            'stream_name': 'events',
        }
    },
    'high_priority': {
        'BACKEND': 'django_broadcaster.backends.RedisStreamBackend',
        'OPTIONS': {
            'host': 'redis.example.com',
            'port': 6379,
            'stream_name': 'high_priority_events',
            'max_len': 100000,
        }
    }
}

When publishing events, you can specify which backend to use:

from django_broadcaster.publishers import publisher

publisher.publish_event(
    event_type='user.created',
    source='user-service',
    data={'user_id': 123},
    backend='high_priority'  # Specify the backend
)

Backend Options

Redis Stream Backend

The Redis Stream backend supports the following options:

'OPTIONS': {
    'host': 'localhost',           # Redis host
    'port': 6379,                  # Redis port
    'db': 0,                       # Redis database number
    'password': None,              # Redis password (optional)
    'stream_name': 'events',       # Name of the Redis stream
    'max_len': 10000,              # Maximum length of the stream
    'connect_timeout': 5,          # Connection timeout in seconds
    'socket_timeout': 5,           # Socket timeout in seconds
}

Worker Configuration

The outbox worker processes events from the outbox and publishes them to the configured backends. You can configure the worker behavior:

# Worker settings
OUTBOX_WORKER = {
    'BATCH_SIZE': 100,             # Number of events to process in one batch
    'SLEEP_TIME': 5,               # Sleep time between batches in seconds
    'MAX_RETRIES': 3,              # Default maximum retry attempts
    'RETRY_BACKOFF': True,         # Use exponential backoff for retries
}

Advanced Configuration

Event Retention

You can configure how long to keep events in the database:

# Event retention settings
OUTBOX_RETENTION = {
    'CLEANUP_PUBLISHED': True,     # Clean up published events
    'PUBLISHED_RETENTION_DAYS': 7, # Keep published events for 7 days
    'FAILED_RETENTION_DAYS': 30,   # Keep failed events for 30 days
}

Logging

Django Dispatch uses Python’s logging module. You can configure logging in your Django settings:

LOGGING = {
    'version': 1,
    'disable_existing_loggers': False,
    'handlers': {
        'console': {
            'class': 'logging.StreamHandler',
        },
    },
    'loggers': {
        'django_broadcaster': {
            'handlers': ['console'],
            'level': 'INFO',
        },
    },
}