This commit is contained in:
harold 2025-04-21 13:40:12 +05:00
parent 5b52f55a1a
commit 52b502dc56
2 changed files with 13 additions and 34 deletions

View File

@ -1,12 +1,8 @@
from fastapi import FastAPI from fastapi import FastAPI
from faststream.rabbit import RabbitBroker, RabbitExchange, ExchangeType, QueueType, RabbitQueue from faststream.rabbit import RabbitBroker, RabbitExchange, ExchangeType, QueueType, RabbitQueue
from faststream.rabbit.fastapi import RabbitRouter, Logger
from src.core.settings.base import settings from src.core.settings.base import settings
rabbitmq_router = RabbitRouter(
url=settings.RABBIT.URL,
)
broker = RabbitBroker( broker = RabbitBroker(
url=settings.RABBIT.URL, url=settings.RABBIT.URL,
@ -38,8 +34,7 @@ success_gemini_subscriber = broker.subscriber(
) )
@rabbitmq_router.after_startup async def init_queue_and_publisher():
async def init_queue_and_publisher(app: FastAPI):
await broker.declare_exchange(base_exchange) await broker.declare_exchange(base_exchange)
await broker.declare_queue(base_queue) await broker.declare_queue(base_queue)
await broker.declare_queue(success_queue) await broker.declare_queue(success_queue)

View File

@ -1,15 +1,16 @@
from contextlib import asynccontextmanager from contextlib import asynccontextmanager
from fastapi import FastAPI from fastapi import FastAPI
from pyrogram import Client, filters, idle from pyrogram import Client, filters, idle
from pyrogram.handlers import MessageHandler from pyrogram.handlers import MessageHandler
from src.core.settings.base import settings from src.core.settings.base import settings
from src.core.tg_service.messages_handler import message_listener from src.core.tg_service.messages_handler import message_listener
from src.core.rabbitmq.connect import broker, init_queue_and_publisher, rabbitmq_router from src.core.rabbitmq.connect import broker, init_queue_and_publisher
import uvicorn
import asyncio
# Инициализация Pyrogram клиента
tg_client = Client( tg_app = Client(
name=settings.ACCOUNT.NAME, name=settings.ACCOUNT.NAME,
api_id=settings.ACCOUNT.API_ID, api_id=settings.ACCOUNT.API_ID,
api_hash=settings.ACCOUNT.API_HASH, api_hash=settings.ACCOUNT.API_HASH,
@ -17,35 +18,18 @@ tg_client = Client(
@asynccontextmanager @asynccontextmanager
async def lifespan(app: FastAPI): async def lifespan(fastapi_app: FastAPI):
await tg_client.start() await tg_app.start()
await broker.start() await broker.start()
await init_queue_and_publisher(app) await init_queue_and_publisher()
await idle() await idle()
yield yield
await tg_app.stop()
await tg_client.stop()
await broker.close()
# Создание FastAPI приложения с кастомным lifespan tg_app.add_handler(MessageHandler(
fastapi_app = FastAPI(lifespan=lifespan)
fastapi_app.include_router(rabbitmq_router)
# Добавление обработчика для Telegram
tg_client.add_handler(MessageHandler(
callback=message_listener, callback=message_listener,
filters=filters.all filters=filters.all
)) ))
if __name__ == "__main__": app = FastAPI(lifespan=lifespan)
# Запуск FastAPI и Pyrogram в одном event loop
config = uvicorn.Config(
fastapi_app,
host="0.0.0.0",
port=8000,
loop="asyncio"
)
server = uvicorn.Server(config)
asyncio.run(server.serve())