Files
microservice/celery_app.py

54 lines
2.1 KiB
Python

from celery import Celery
from core.config import settings
import os
from celery.schedules import crontab
from datetime import timedelta
# Configuración de Celery
celery_app = Celery(
"microservice",
broker=f"redis://{os.getenv('REDIS_HOST', 'localhost')}:{os.getenv('REDIS_PORT', '6379')}/{os.getenv('REDIS_DB', '0')}",
backend=f"redis://{os.getenv('REDIS_HOST', 'localhost')}:{os.getenv('REDIS_PORT', '6379')}/{os.getenv('REDIS_DB', '0')}",
include=['tasks']
)
# Configuración adicional
celery_app.conf.update(
# Configuración básica
task_serializer='json',
accept_content=['json'],
result_serializer='json',
timezone='UTC',
enable_utc=True,
# Configuración de workers
task_time_limit=3600, # 1 hour timeout
worker_prefetch_multiplier=1,
worker_max_tasks_per_child=1000,
# Configuración de resultados persistentes
task_track_started=True, # Guarda cuando la tarea inicia
task_ignore_result=False, # Asegura que se guarden los resultados
result_expires=60 * 60 * 24 * 7, # Mantiene resultados por 7 días
task_store_errors_even_if_ignored=True, # Guarda errores aunque la tarea sea ignorada
task_save_success_on_complete=True # Guarda los resultados exitosos
)
# desde aqui se pueden programar tareas pero al estar desde microservicios no tengo acceso a la informacion de organizacion
# por este motivo es mejor programar las tareas desde la aplicacion de django
celery_app.conf.beat_schedule = {
# 'prueba-4': {
# 'task': 'tasks.prueba_hola',
# 'schedule': timedelta(seconds=60), # 12:00 = 6:03 AM
# },
}
# Autodiscovery of tasks
celery_app.autodiscover_tasks()
from api.api_v2.modules.acuses.tasks import process_acuse_request
from api.api_v2.modules.coves.tasks import process_cove_request, process_acuse_cove_request
from api.api_v2.modules.edocs.tasks import process_edoc_download_request
from api.api_v2.modules.pedimentos.tasks import process_pedimento_completo_request
from api.api_v2.modules.partidas.tasks import process_partida_request
from api.api_v2.modules.remesas.tasks import process_remesa_request