This commit is contained in:
@@ -1,34 +1,35 @@
|
||||
import json
|
||||
import os
|
||||
|
||||
import json
|
||||
import aio_pika
|
||||
import logging
|
||||
|
||||
RABBITMQ_URL: str = os.getenv("RABBITMQ_URL", "amqp://user:password@rabbitmq/")
|
||||
QUEUE_NAME: str = "ticket_events"
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
QUEUE_NAME = "pdf_generation_queue"
|
||||
|
||||
async def publish_ticket_paid_event(ticket_id: int, user_id: int) -> None:
|
||||
"""Публикует событие ticket_paid в очередь RabbitMQ.
|
||||
async def publish_ticket_task(ticket_id: int):
|
||||
"""Отправляет ID билета в RabbitMQ."""
|
||||
# Читаем строго из ENV прямо перед вызовом
|
||||
rabbitmq_url = os.getenv("RABBITMQ_URL")
|
||||
if not rabbitmq_url:
|
||||
logger.error("КРИТИЧЕСКАЯ ОШИБКА: RABBITMQ_URL не задан в переменных окружения!")
|
||||
return
|
||||
|
||||
Формат совпадает с тем, что ожидает worker.py:
|
||||
{"action": "ticket_paid", "ticket_id": <int>, "user_id": <int>}
|
||||
"""
|
||||
connection = await aio_pika.connect_robust(RABBITMQ_URL)
|
||||
async with connection:
|
||||
channel = await connection.channel()
|
||||
|
||||
# durable=True — очередь переживёт перезапуск брокера
|
||||
queue = await channel.declare_queue(QUEUE_NAME, durable=True)
|
||||
|
||||
body = json.dumps(
|
||||
{"action": "ticket_paid", "ticket_id": ticket_id, "user_id": user_id}
|
||||
).encode()
|
||||
|
||||
await channel.default_exchange.publish(
|
||||
aio_pika.Message(
|
||||
body=body,
|
||||
delivery_mode=aio_pika.DeliveryMode.PERSISTENT,
|
||||
content_type="application/json",
|
||||
),
|
||||
routing_key=queue.name,
|
||||
)
|
||||
try:
|
||||
connection = await aio_pika.connect_robust(rabbitmq_url)
|
||||
async with connection:
|
||||
channel = await connection.channel()
|
||||
queue = await channel.declare_queue(QUEUE_NAME, durable=True)
|
||||
|
||||
message = aio_pika.Message(
|
||||
body=json.dumps({"ticket_id": ticket_id}).encode(),
|
||||
delivery_mode=aio_pika.DeliveryMode.PERSISTENT
|
||||
)
|
||||
|
||||
await channel.default_exchange.publish(
|
||||
message,
|
||||
routing_key=queue.name,
|
||||
)
|
||||
logger.info(f"Задача на генерацию PDF для билета {ticket_id} улетела в очередь.")
|
||||
except Exception as e:
|
||||
logger.error(f"Сбой RabbitMQ при отправке билета {ticket_id}: {e}")
|
||||
Reference in New Issue
Block a user