Fixes with queuing

This commit is contained in:
2026-05-06 11:13:23 -06:00
parent 7331dcb086
commit 57fa3b7944
2 changed files with 84 additions and 109 deletions

View File

@@ -12,10 +12,10 @@ class RabbitMQConsumer:
self.host = host
self.port = port
self.callback = None
def set_callback(self, callback: Callable[[Dict[str, Any]], None]) -> None:
self.callback = callback
def start_consuming(self) -> None:
try:
connection = pika.BlockingConnection(
@@ -23,36 +23,37 @@ class RabbitMQConsumer:
)
channel = connection.channel()
channel.queue_declare(queue=self.queue_name, durable=True)
channel.basic_qos(prefetch_count=1)
def callback_wrapper(ch, method, properties, body):
try:
message = json.loads(body.decode('utf-8'))
logger.info(f"Received message from queue '{self.queue_name}': {message}")
if self.callback:
self.callback(message)
ch.basic_ack(delivery_tag=method.delivery_tag)
except IntegrityError as e:
# Error de negocio: no tiene sentido reintentar
logger.warning(f"Business error, discarding message: {e}")
except (IntegrityError, ValueError, TypeError, KeyError) as e:
# Errores de negocio/datos: no tiene sentido reintentar
logger.warning(f"Business/data error, discarding message: {e}")
ch.basic_nack(delivery_tag=method.delivery_tag, requeue=False)
except Exception as e:
# Error transitorio (red, DB caída): puede resolverse solo
# Error transitorio (red, DB caída): puede resolverse solo
logger.error(f"Transient error processing message: {e}")
ch.basic_nack(delivery_tag=method.delivery_tag, requeue=True)
channel.basic_consume(
queue=self.queue_name,
on_message_callback=callback_wrapper,
auto_ack=False
)
logger.info(f"[*] Waiting for messages in queue '{self.queue_name}'. Ctrl+C to exit.")
channel.start_consuming()
except Exception as e:
logger.error(f"Error in consumer: {e}")
raise