Skip to content
broker-configurations logo

Broker Configurations

broker-configurations

Message broker setup patterns (Redis, RabbitMQ, SQS) for Celery including connection strings, SSL configuration, high availability, and production best practices. Use when configuring message brokers, setting up Redis/RabbitMQ/SQS, troubleshooting broker connections, implementing HA/failover, sec...

SKILL.md

Full skill instructions

Broker Configurations

Purpose: Comprehensive message broker configuration for Celery with production-ready patterns for Redis, RabbitMQ, and Amazon SQS.

Activation Triggers:

  • Broker connection errors
  • Setting up new Celery project
  • Implementing high availability
  • SSL/​TLS configuration needed
  • Performance tuning required
  • Multi-broker comparison
  • Cloud deployment (AWS/​GCP/​Azure)
  • Sentinel or cluster setup

Key Resources:

  • templates/​redis-config.py - Production Redis configuration
  • templates/​rabbitmq-config.py - RabbitMQ with quorum queues
  • templates/​sqs-config.py - AWS SQS with IAM roles
  • templates/​connection-strings.env - Connection string formats
  • templates/​ssl-config.py - SSL/​TLS configuration
  • scripts/​test-broker-connection.sh - Connection testing
  • scripts/​setup-redis.sh - Redis installation and configuration
  • scripts/​setup-rabbitmq.sh - RabbitMQ cluster setup
  • examples/​redis-sentinel.md - High availability with Sentinel
  • examples/​rabbitmq-ha.md - RabbitMQ clustering and quorum queues
  • examples/​sqs-setup.md - Complete AWS SQS integration

Broker Selection Guide

Quick Comparison

FeatureRedisRabbitMQSQS
PerformanceExcellent (small msgs)Very GoodGood
ReliabilityGood (with Sentinel)Excellent (quorum)Excellent
MonitoringYesYesLimited
Remote ControlYesYesNo
ManagementManual/​CloudManualFully Managed
CostServer/​CloudServer/​CloudPay-per-use
Best ForSpeed, simple setupReliability, featuresAWS, serverless

Decision Matrix

Choose Redis when:

  • Need maximum speed for small messages
  • Want simple setup and maintenance
  • Already using Redis for caching/​results
  • Budget for managed Redis (Upstash, ElastiCache)
  • Can accept brief downtime during failover

Choose RabbitMQ when:

  • Need guaranteed message delivery
  • Require complex routing patterns
  • Need worker remote control features
  • Want built-in monitoring and management UI
  • Have dedicated ops team for management

Choose SQS when:

  • Running on AWS infrastructure
  • Want zero operational overhead
  • Need unlimited automatic scaling
  • Prefer pay-per-use pricing
  • Don't need worker remote control

Redis Broker Setup

1. Basic Configuration

# Install dependencies
pip install "celery[redis]"

# Use template
cp templates/​redis-config.py celeryconfig.py

# Configure environment
cp templates/​connection-strings.env .env
# Edit .env with actual values

Key settings:

# templates/​redis-config.py
broker_url = 'redis://:password@localhost:6379/​0'

broker_transport_options = {
    'visibility_timeout': 3600,
    'retry_on_timeout': True,
    'max_connections': 50,
}

2. Production Settings

CRITICAL: Set maxmemory-policy noeviction in Redis config:

# Run setup script
./​scripts/​setup-redis.sh --install --configure

# Or manually
redis-cli CONFIG SET maxmemory-policy noeviction

Why: Prevents Redis from evicting task data, which would cause task loss.

3. High Availability with Sentinel

# See comprehensive guide
cat examples/​redis-sentinel.md

# Quick setup
docker-compose -f examples/​docker-compose.sentinel.yml up -d

# Configure Celery for Sentinel
CELERY_BROKER_URL='sentinel://host1:26379;host2:26379;host3:26379/​0'

Connection string format:

# Sentinel URL
broker_url = 'sentinel://sentinel1:26379;sentinel2:26379/​0'

broker_transport_options = {
    'master_name': 'mymaster',
    'sentinel_kwargs': {'password': 'sentinel_password'},
}

RabbitMQ Broker Setup

1. Basic Configuration

# Install dependencies
pip install "celery[amqp]"

# Use template
cp templates/​rabbitmq-config.py celeryconfig.py

# Run setup script
./​scripts/​setup-rabbitmq.sh --install --configure

Key settings:

# templates/​rabbitmq-config.py
broker_url = 'amqp://user:password@localhost:5672/​vhost'

# CRITICAL for quorum queues
broker_transport_options = {
    'confirm_publish': True,  # Required!
}

2. Quorum Queues (Recommended)

Provides:

  • Automatic replication
  • Leader election on failure
  • No message loss
from kombu import Queue

task_queues = (
    Queue(
        'default',
        queue_arguments={
            'x-queue-type': 'quorum',
            'x-delivery-limit': 3,
        }
    ),
)

3. High Availability Cluster

# See comprehensive guide
cat examples/​rabbitmq-ha.md

# Docker cluster setup
docker-compose -f examples/​docker-compose.rabbitmq-cluster.yml up -d

# Verify cluster
docker exec rabbitmq-1 rabbitmqctl cluster_status

HAProxy load balancing:

# Distribute connections across cluster
broker_url = 'amqp://user:password@haproxy:5670/​vhost'

AWS SQS Broker Setup

1. IAM Configuration

# Create IAM policy and user
aws iam create-policy \
  --policy-name CelerySQSPolicy \
  --policy-document file://examples/​celery-sqs-policy.json

# Or use IAM role (recommended for EC2/​ECS)
# See examples/​sqs-setup.md for complete guide

2. Basic Configuration

# Install dependencies
pip install "celery[sqs]"

# Use template
cp templates/​sqs-config.py celeryconfig.py

With IAM role (recommended):

# No credentials needed
broker_url = 'sqs://'

broker_transport_options = {
    'region': 'us-east-1',
    'visibility_timeout': 3600,
    'polling_interval': 1,
    'wait_time_seconds': 10,  # Long polling
}

With explicit credentials:

broker_url = 'sqs://access_key:secret_key@'

3. FIFO Queues

For ordered task processing:

task_queues = (
    Queue(
        'celery-default.fifo',
        queue_arguments={
            'FifoQueue': 'true',
            'ContentBasedDeduplication': 'true',
        }
    ),
)

# Send with message group ID
task.apply_async(
    args=[data],
    properties={'MessageGroupId': 'user-123'}
)

4. Result Backend

SQS doesn't support results - use S3 or DynamoDB:

# Option 1: S3
result_backend = 's3://my-bucket/​celery-results/'

# Option 2: DynamoDB
result_backend = 'dynamodb://'
result_backend_transport_options = {
    'table_name': 'celery-results',
}

# Option 3: Redis (hybrid)
result_backend = 'redis://redis.example.com:6379/​0'

SSL/​TLS Configuration

1. Redis with SSL

# Use templates/​ssl-config.py
from templates.ssl_config import app

# Or manually
broker_url = 'rediss://password@host:6380/​0'  # Note: rediss://

broker_use_ssl = {
    'ssl_cert_reqs': ssl.CERT_REQUIRED,
    'ssl_ca_certs': '/​path/​to/​ca.pem',
    'ssl_certfile': '/​path/​to/​client-cert.pem',
    'ssl_keyfile': '/​path/​to/​client-key.pem',
}

2. RabbitMQ with SSL

broker_url = 'amqps://user:password@host:5671/​vhost'  # Note: amqps://

broker_use_ssl = {
    'ssl_cert_reqs': ssl.CERT_REQUIRED,
    'ssl_ca_certs': '/​path/​to/​ca.pem',
    'ssl_certfile': '/​path/​to/​client-cert.pem',
    'ssl_keyfile': '/​path/​to/​client-key.pem',
}

3. Environment Variables

# .env
BROKER_SSL_ENABLED=true
BROKER_SSL_CERT=/​path/​to/​client-cert.pem
BROKER_SSL_KEY=/​path/​to/​client-key.pem
BROKER_SSL_CA=/​path/​to/​ca-cert.pem
BROKER_SSL_VERIFY_MODE=CERT_REQUIRED

Testing and Validation

1. Test Connection

# Test any broker type
./​scripts/​test-broker-connection.sh redis
./​scripts/​test-broker-connection.sh rabbitmq
./​scripts/​test-broker-connection.sh sqs

# Check specific features
./​scripts/​test-broker-connection.sh redis --ssl

Script checks:

  • Broker connectivity
  • Authentication
  • SSL/​TLS validation
  • Configuration correctness
  • Performance baseline

2. Python Test

from celery import Celery

app = Celery(broker='redis://localhost:6379/​0')

# Test connection
try:
    with app.connection() as conn:
        conn.ensure_connection(max_retries=3, timeout=5)
        print("✅ Connection successful")
except Exception as e:
    print(f"❌ Connection failed: {e}")

Common Issues and Solutions

Redis: "maxmemory-policy not noeviction"

Problem: Redis evicting task data Solution:

./​scripts/​setup-redis.sh --configure
# Or manually:
redis-cli CONFIG SET maxmemory-policy noeviction

RabbitMQ: "Basic.publish: NOT_FOUND"

Problem: Queue doesn't exist or wrong vhost Solution:

# Check vhost
rabbitmqctl list_vhosts

# Check permissions
rabbitmqctl list_permissions -p /​celery_vhost

SQS: "Access Denied"

Problem: IAM permissions insufficient Solution:

# Verify IAM policy includes all required actions
# See examples/​sqs-setup.md for complete policy

# Test credentials
aws sts get-caller-identity
aws sqs list-queues --queue-name-prefix celery-

Connection Timeout

Problem: Network/​firewall blocking connection Solution:

# Test network connectivity
telnet broker-host 6379  # Redis
telnet broker-host 5672  # RabbitMQ

# Check firewall rules
# Verify security groups (AWS)
# Check iptables rules

Performance Tuning

Redis Optimization

broker_transport_options = {
    'visibility_timeout': 3600,
    'max_connections': 100,  # Increase for high concurrency
    'socket_timeout': 5.0,
    'socket_keepalive': True,
    'health_check_interval': 30,
}

# Worker settings
worker_prefetch_multiplier = 4  # Prefetch 4x concurrency
worker_max_tasks_per_child = 1000

RabbitMQ Optimization

broker_transport_options = {
    'confirm_publish': True,
    'max_retries': 3,
}

# Use quorum queues for reliability
# Adjust prefetch for throughput
worker_prefetch_multiplier = 4

# Disable QoS for maximum speed (classic queues only)
# Note: Not compatible with worker autoscaling

SQS Optimization

# Reduce API calls (costs)
broker_transport_options = {
    'polling_interval': 5,  # Poll less frequently
    'wait_time_seconds': 20,  # Max long polling
}

# CRITICAL: Prevent visibility timeout
worker_prefetch_multiplier = 1  # Must be 1 for SQS

Monitoring

Key Metrics

Redis:

  • Connection count: INFO clients
  • Memory usage: INFO memory
  • Key count: DBSIZE
  • Commands/​sec: INFO stats

RabbitMQ:

  • Queue length: rabbitmqctl list_queues
  • Consumer count: Check management UI
  • Memory usage: rabbitmqctl status
  • Message rate: Check management UI

SQS:

  • ApproximateNumberOfMessagesVisible: Queue backlog
  • NumberOfMessagesSent: Task creation rate
  • NumberOfMessagesReceived: Task completion rate
  • NumberOfEmptyReceives: Polling efficiency

Health Check Script

#!/​bin/​bash
# health-check.sh

BROKER_TYPE="${1:-redis}"

case "$BROKER_TYPE" in
  redis)
    redis-cli PING || exit 1
    ;;
  rabbitmq)
    rabbitmqctl status || exit 1
    ;;
  sqs)
    aws sqs list-queues --queue-name-prefix celery- || exit 1
    ;;
esac

echo "✅ Broker healthy"

Security Best Practices

1. Authentication

  • Redis: Always set requirepass
  • RabbitMQ: Use strong passwords, dedicated vhosts
  • SQS: Use IAM roles, not access keys

2. Network Security

  • Use SSL/​TLS for production
  • Configure firewalls/​security groups
  • Use VPC/​private networks when possible
  • Restrict broker access to worker nodes only

3. Access Control

  • Principle of least privilege
  • Separate credentials per environment
  • Rotate passwords regularly
  • Use secret management (Vault, Doppler, AWS Secrets Manager)

4. Monitoring

  • Enable audit logging
  • Monitor authentication failures
  • Alert on configuration changes
  • Track connection patterns

Resources

Templates:

  • redis-config.py - Production Redis configuration
  • rabbitmq-config.py - RabbitMQ with quorum queues
  • sqs-config.py - AWS SQS with IAM
  • connection-strings.env - All connection formats
  • ssl-config.py - SSL/​TLS configuration

Scripts:

  • test-broker-connection.sh - Test any broker
  • setup-redis.sh - Redis installation and config
  • setup-rabbitmq.sh - RabbitMQ cluster setup

Examples:

  • redis-sentinel.md - High availability setup
  • rabbitmq-ha.md - Clustering and quorum queues
  • sqs-setup.md - Complete AWS integration

Documentation:


Version: 1.0.0 Celery Compatibility: 5.0+ Supported Brokers: Redis 6+, RabbitMQ 3.8+, Amazon SQS

Security Compliance

This skill follows strict security rules:

  • All code examples use placeholder values only
  • No real API keys, passwords, or secrets
  • Environment variable references in all code
  • .gitignore protection documented

More DevOps & CI/CD skills

Project scaffolding, deployment configuration, and CI/CD setup for Google ADK agents.

6K 472.6K
View

Set up tracing, logging, and monitoring for deployed ADK agents across Cloud Trace, BigQuery, and third-party platforms.

6K 472.6K
View

Enterprise Azure infrastructure architect generating Bicep or Terraform from workload descriptions.

1.5K 454.3K
View
azure-kubernetes logo
DevOps & CI/CD

azure-kubernetes

Plan and configure production-ready Azure Kubernetes Service clusters with Day-0 and Day-1 best practices.

1.5K 447.1K
View

Raw mechanical interfaces fusing Swiss typographic print with military terminal aesthetics. Rigid grids, extreme type scale contrast, utilitarian color, analog degradation effects. For data-heavy dashboards, portfolios, or editorial sites that need to feel like declassified blueprints.

92.7K 354.9K
View
just-scrape logo
DevOps & CI/CD

just-scrape

Web search, scraping, extraction, crawling, and monitoring via ScrapeGraph AI CLI.

69 245K
View

Skill for working with Firebase Hosting (Classic). Use this when you want to deploy static web apps, Single Page Apps (SPAs), or simple microservices. Do NOT use for Firebase App Hosting.

462 159.7K
View

Deploy and manage web apps with Firebase App Hosting. Use this skill when deploying Next.js/Angular apps with backends.

462 159.1K
View
deploy-to-vercel logo
DevOps & CI/CD

deploy-to-vercel

Deploy applications and websites to Vercel. Use when the user requests deployment actions like "deploy my app", "deploy and give me the link", "push this live", or "create a preview deployment".

31.9K 146.6K
View
programmatic-seo logo
DevOps & CI/CD

programmatic-seo

Build SEO-optimized pages at scale using templates, data, and proven playbook patterns.

53.3K 140.1K
View

Design and build isolated, reusable Convex backend components with clear boundaries and app-facing wrappers.

63 123.5K
View

Deploy and manage projects on Vercel using token-based authentication. Use when working with Vercel CLI using access tokens rather than interactive login — e.g. "deploy to vercel", "set up vercel", "add environment variables to vercel".

31.9K 116.1K
View

Coding & apps AI tools

Opus Clip logo
Coding & apps

Opus Clip

Opus.ai: Revolutionize Your Web Experience

Free
View
Imagica logo
Coding & apps

Imagica

Build a no-code AI app in minutes.

Freemium
View
E
Coding & apps

Emergent.sh

An IDE for code migration from legacy to modern frameworks through coding agents.

Freemium
View
Wonder Dynamics logo
Coding & apps

Wonder Dynamics

Automate CGI animation in live-action scenes

Paid
View
M
Coding & apps

Mixo

Launch a website in seconds with AI.

Paid
View
AI Code Convert logo
Coding & apps

AI Code Convert

Streamline Your Coding Experience with AI Code Helper

Free
View