Features: 1) Add Redis sysctl configurations to docker-compose.yml; 2) Introduce broker heartbeat and transport options for Celery in settings/celery.py.

Fixes: 1) Extract and centralize broker transport options in `settings/celery.py`; 2) Remove redundant Celery settings from `celery.py`.

Extra: 1) Cleanup and streamline Celery configuration in `celery.py`.
This commit is contained in:
Egor Pavlovich Gorbunov 2025-07-03 17:14:22 +03:00
parent 29005527bb
commit f37206ed4e
3 changed files with 19 additions and 9 deletions

View file

@ -68,6 +68,9 @@ services:
env_file:
- .env
logging: *default-logging
sysctls:
net.ipv4.tcp_keepalive_time: 60
vm.overcommit_memory: 1
healthcheck:
test: [ "CMD", "redis-cli", "-a", "$REDIS_PASSWORD", "ping" ]
interval: 30s

View file

@ -9,21 +9,14 @@ os.environ.setdefault("DJANGO_SETTINGS_MODULE", "evibes.settings")
app = Celery("evibes")
app.conf.update(
broker_url=f"redis://:{REDIS_PASSWORD}@redis:6379/0",
result_backend=f"redis://:{REDIS_PASSWORD}@redis:6379/0",
worker_hijack_root_logger=False,
worker_log_format="[%(asctime)s: %(levelname)s/%(processName)s] %(name)s: %(message)s",
worker_task_log_format="[%(asctime)s: %(levelname)s/%(processName)s] %(name)s: %(message)s",
broker_connection_retry_on_startup=True,
timezone=TIME_ZONE,
task_serializer="json",
result_serializer="json",
result_compression="zlib",
accept_content=["json"],
broker_transport_options={
"retry_policy": {"interval_start": 0.1, "interval_step": 0.2, "max_retries": 5},
"visibility_timeout": 3600,
},
task_acks_late=True,
task_reject_on_worker_lost=True,
)

View file

@ -5,8 +5,22 @@ from evibes.settings.base import REDIS_PASSWORD, TIME_ZONE
CELERY_ENABLE_UTC = False
CELERY_TIMEZONE = TIME_ZONE
CELERY_BROKER_URL = f"redis://:{REDIS_PASSWORD + '@'}redis:6379/0"
CELERY_RESULT_BACKEND = f"redis://:{REDIS_PASSWORD + '@'}redis:6379/0"
CELERY_BROKER_URL = f"redis://:{REDIS_PASSWORD}@redis:6379/0"
CELERY_BROKER_HEARTBEAT = 10
CELERY_BROKER_HEARTBEAT_CHECKRATE = 2
CELERY_BROKER_POOL_LIMIT = 10
CELERY_BROKER_TRANSPORT_OPTIONS = {
"visibility_timeout": 3600,
"retry_policy": {"interval_start": 0.1, "interval_step": 0.2, "max_retries": 5},
"socket_keepalive": True,
"socket_timeout": 30,
"socket_connect_timeout": 30,
"retry_on_timeout": True,
}
CELERY_RESULT_BACKEND = CELERY_BROKER_URL
CELERY_BEAT_SCHEDULER = "django_celery_beat.schedulers.DatabaseScheduler"