main.py 3.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. # 主应用入口,整合多个 FastAPI 应用
  2. import uvicorn
  3. from fastapi import FastAPI
  4. from contextlib import asynccontextmanager
  5. # 导入所有子应用
  6. from api.search_infinity import app as search_app
  7. from api.tag_manage import app as tag_app
  8. from api.sdk.dataset_manage import app as dataset_app
  9. # 定义主应用的生命周期管理
  10. @asynccontextmanager
  11. async def main_lifespan(app: FastAPI):
  12. """主应用生命周期管理"""
  13. from utils.infinity import get_client, close_client
  14. print("=== Infinity API Gateway 启动 ===")
  15. # 1. 初始化Infinity全局客户端(在服务启动时)
  16. get_client(database="book_image_db")
  17. print("✅ Infinity客户端已初始化")
  18. # 2. 初始化MySQL全局客户端
  19. from utils.mysql import init_global_mysql_client, close_global_mysql_client
  20. init_global_mysql_client()
  21. print("✅ MySQL客户端已初始化")
  22. # 3. 初始化MinIO全局客户端并校验存储桶
  23. from utils.file.minio.minio_util import init_minio_client, close_minio_client
  24. init_minio_client(check_bucket=True)
  25. print("✅ MinIO客户端已初始化并校验存储桶")
  26. yield
  27. print("=== Infinity API Gateway 关闭 ===")
  28. # 1. 关闭Infinity全局客户端(在服务关闭时)
  29. close_client()
  30. print("✅ Infinity客户端已关闭")
  31. # 2. 关闭MySQL全局客户端
  32. close_global_mysql_client()
  33. print("✅ MySQL客户端已关闭")
  34. # 3. 关闭MinIO全局客户端
  35. close_minio_client()
  36. print("✅ MinIO客户端已关闭")
  37. # 创建主应用
  38. main_app = FastAPI(
  39. title="Infinity API Gateway",
  40. description="整合多个 FastAPI 应用的 API 网关",
  41. version="1.0.0",
  42. lifespan=main_lifespan
  43. )
  44. # 挂载子应用
  45. # 1. 搜索 API - 访问路径: /search/*
  46. main_app.mount("/search", search_app, name="search_api")
  47. # 2. 标签管理 API - 访问路径: /tag/*
  48. main_app.mount("/tag", tag_app, name="tag_api")
  49. # 3. 数据集管理 API - 访问路径: /dataset/*
  50. main_app.mount("/dataset", dataset_app, name="dataset_api")
  51. # 主应用根路径
  52. @main_app.get("/")
  53. async def root():
  54. """API 网关根路径"""
  55. return {
  56. "message": "Welcome to GRAPH_RAG API Gateway",
  57. "available_apps": {
  58. "search_api": "访问路径: /search, 文档: /search/docs",
  59. "hybrid_http_api": "访问路径: /hybrid, 文档: /hybrid/docs",
  60. "tag_api": "访问路径: /tag, 文档: /tag/docs",
  61. "dataset_api": "访问路径: /dataset, 文档: /dataset/docs"
  62. }
  63. }
  64. # 健康检查端点
  65. @main_app.get("/health")
  66. async def health_check():
  67. """主应用健康检查"""
  68. return {"status": "healthy", "service": "Infinity API Gateway"}
  69. if __name__ == "__main__":
  70. print("=== 启动 GRAPH_RAG API Gateway ===")
  71. """启动主应用"""
  72. uvicorn.run(
  73. "main:main_app", # 应用路径: 模块名:应用实例名
  74. host="0.0.0.0", # 允许所有IP访问
  75. port=18001, # 服务端口
  76. reload=False, # 开发模式下自动重载
  77. workers=1, # 生产环境可根据需要增加
  78. log_level="info" # 日志级别
  79. )