82 lines
2.6 KiB
Python
82 lines
2.6 KiB
Python
# shared/config/rabbitmq_config.py
|
|
"""
|
|
RabbitMQ configuration for the alert and recommendation system
|
|
Supports both alerts and recommendations through a unified topic exchange
|
|
"""
|
|
|
|
RABBITMQ_CONFIG = {
|
|
"exchanges": {
|
|
"alerts": {
|
|
"name": "alerts.exchange",
|
|
"type": "topic",
|
|
"durable": True,
|
|
"auto_delete": False
|
|
},
|
|
"dead_letter": {
|
|
"name": "dlx.exchange",
|
|
"type": "direct",
|
|
"durable": True,
|
|
"auto_delete": False
|
|
}
|
|
},
|
|
"queues": {
|
|
"alert_processing": {
|
|
"name": "alert.processing.queue",
|
|
"durable": True,
|
|
"arguments": {
|
|
"x-message-ttl": 3600000, # 1 hour TTL
|
|
"x-max-length": 10000, # Max 10k messages
|
|
"x-overflow": "reject-publish",
|
|
"x-dead-letter-exchange": "dlx.exchange",
|
|
"x-dead-letter-routing-key": "failed.items"
|
|
}
|
|
},
|
|
"dead_letter": {
|
|
"name": "alert.dead_letter.queue",
|
|
"durable": True,
|
|
"arguments": {
|
|
"x-message-ttl": 86400000 # 24 hours for dead letters
|
|
}
|
|
}
|
|
},
|
|
"bindings": [
|
|
{
|
|
"queue": "alert.processing.queue",
|
|
"exchange": "alerts.exchange",
|
|
"routing_key": "*.*.*" # alert/recommendation.severity.service
|
|
},
|
|
{
|
|
"queue": "alert.dead_letter.queue",
|
|
"exchange": "dlx.exchange",
|
|
"routing_key": "failed.items"
|
|
}
|
|
],
|
|
"routing_patterns": {
|
|
# alert/recommendation.severity.service_name
|
|
"alert": "alert.{severity}.{service}",
|
|
"recommendation": "recommendation.{severity}.{service}",
|
|
"all_alerts": "alert.*.*",
|
|
"all_recommendations": "recommendation.*.*",
|
|
"urgent_items": "*.urgent.*",
|
|
"high_items": "*.high.*"
|
|
}
|
|
}
|
|
|
|
def get_routing_key(item_type: str, severity: str, service: str) -> str:
|
|
"""Generate routing key for item publishing"""
|
|
return f"{item_type}.{severity}.{service}"
|
|
|
|
def get_binding_patterns(item_types: list = None, severities: list = None, services: list = None) -> list:
|
|
"""Generate binding patterns for selective consumption"""
|
|
patterns = []
|
|
|
|
item_types = item_types or ["alert", "recommendation"]
|
|
severities = severities or ["urgent", "high", "medium", "low"]
|
|
services = services or ["*"]
|
|
|
|
for item_type in item_types:
|
|
for severity in severities:
|
|
for service in services:
|
|
patterns.append(f"{item_type}.{severity}.{service}")
|
|
|
|
return patterns |