2026-06-20 22:12:42 +08:00
|
|
|
|
"""外部系统限界上下文重构包。
|
|
|
|
|
|
|
|
|
|
|
|
开发期间根目录为 ``external_systems/``,切换日重命名为 ``external_systems/``。
|
|
|
|
|
|
本包采用轻量六边形架构(Ports & Adapters):
|
|
|
|
|
|
|
|
|
|
|
|
- ``core/``:数据类 + 端口定义 + 校验函数,不依赖任何外部
|
|
|
|
|
|
- ``use_cases/``:用例编排 + DTO + Mapper + Context 构建,依赖 ``core/``
|
|
|
|
|
|
- ``framework/`` + ``adapters/persistence/``:实现端口,依赖 ``core/`` 端口
|
|
|
|
|
|
|
|
|
|
|
|
详见 ``docs/vibe/v1.1/设计方案/2026-06-17-外部系统六边形架构重构-设计方案-最终版.md``。
|
|
|
|
|
|
"""
|
|
|
|
|
|
|
|
|
|
|
|
from __future__ import annotations
|
|
|
|
|
|
|
2026-06-25 16:56:19 +08:00
|
|
|
|
from yuxi.utils import logger
|
|
|
|
|
|
|
2026-06-20 22:12:42 +08:00
|
|
|
|
|
|
|
|
|
|
def register_adapters() -> None:
|
|
|
|
|
|
"""显式注册所有外部系统适配器、认证插件与集成包。
|
|
|
|
|
|
|
|
|
|
|
|
由 ``server/utils/lifespan.py`` 在应用启动时调用(切换日后接入)。
|
|
|
|
|
|
|
|
|
|
|
|
调用顺序(蓝本 §12.1 第 8 条):
|
|
|
|
|
|
1. ``discover_adapters()``:扫描 ``framework/adapters/`` 注册协议适配器
|
|
|
|
|
|
2. ``discover_auth_plugins()``:扫描 ``framework/auth_plugins/`` 注册 9 个框架插件
|
|
|
|
|
|
3. ``discover_integration_packages()``:扫描 ``integrations/`` 注册厂商集成包
|
|
|
|
|
|
|
|
|
|
|
|
顺序约束说明:adapters 与 auth_plugins 互不依赖,可任意顺序;integrations 可能
|
|
|
|
|
|
注册渠道专属插件与适配器,放最后。三者均通过子包 ``__init__.py`` 自注册副作用完成。
|
|
|
|
|
|
"""
|
|
|
|
|
|
# 1. 自动发现并注册所有协议适配器
|
|
|
|
|
|
from yuxi.external_systems.framework.registry.discovery import discover_adapters
|
|
|
|
|
|
|
|
|
|
|
|
discover_adapters()
|
|
|
|
|
|
|
|
|
|
|
|
# 2. 自动发现并注册所有认证插件
|
|
|
|
|
|
from yuxi.external_systems.framework.auth_plugins.discovery import discover_auth_plugins
|
|
|
|
|
|
|
|
|
|
|
|
discover_auth_plugins()
|
|
|
|
|
|
|
|
|
|
|
|
# 3. 自动发现并导入所有集成包(由子包 __init__.py 自注册)
|
|
|
|
|
|
from yuxi.external_systems.integrations.discovery import discover_integration_packages
|
|
|
|
|
|
|
|
|
|
|
|
discover_integration_packages()
|
2026-06-25 16:56:19 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
async def shutdown_external_systems() -> None:
|
|
|
|
|
|
"""应用关闭时释放外部系统模块持有的资源。
|
|
|
|
|
|
|
|
|
|
|
|
与 ``register_adapters`` 对称,由 ``server/utils/lifespan.py`` 在应用关停时调用。
|
|
|
|
|
|
|
|
|
|
|
|
释放顺序:
|
|
|
|
|
|
1. ``pool_manager.close_all()``:释放所有连接池句柄(httpx/gRPC 等)
|
|
|
|
|
|
2. ``default_registry.aclose_all()``:释放适配器实例缓存资源
|
|
|
|
|
|
|
|
|
|
|
|
任一步失败仅记录日志,不中断后续清理(best-effort)。
|
|
|
|
|
|
"""
|
|
|
|
|
|
from yuxi.external_systems.framework.runtime.pool_manager import pool_manager
|
|
|
|
|
|
from yuxi.external_systems.framework.registry.adapter_registry import default_registry
|
|
|
|
|
|
|
|
|
|
|
|
try:
|
|
|
|
|
|
await pool_manager.close_all()
|
|
|
|
|
|
except Exception:
|
|
|
|
|
|
logger.warning("释放外部系统连接池失败", exc_info=True)
|
|
|
|
|
|
|
|
|
|
|
|
try:
|
|
|
|
|
|
await default_registry.aclose_all()
|
|
|
|
|
|
except Exception:
|
|
|
|
|
|
logger.warning("释放外部系统适配器实例失败", exc_info=True)
|