2.6 KiB
2.6 KiB
ADR-003-01: Metadata 连接管理技术选型
状态
已接受
日期
2026-02-02
背景
Metadata 连接管理是 Salesforce Metadata API 集成的基础能力,需要支持 source org 的连接创建、会话头管理和调用选项配置,并提供稳定的连接缓存与会话有效性检查能力。该能力还需要与现有的认证与会话管理架构一致,便于维护与复用。
决策
选择方案 1:使用 AbstractConnectionFactory + SessionManager,理由如下:
- 复用现有基础设施:AbstractConnectionFactory 已提供连接缓存与 Session 有效性检查能力
- 与 SessionManager 深度集成:直接获取 Session ID 与 Server URL,避免重复实现会话管理逻辑
- 架构一致:与认证和会话管理、Apex 连接管理保持一致
- 性能与稳定性:连接缓存减少重复创建连接的成本
- 线程安全:AbstractConnectionFactory 使用锁机制保证并发安全
- 维护成本低:已有实现经过验证,风险可控
后果
正面影响
- 复用成熟能力,缩短实现周期
- 连接缓存提升性能,减少重复连接创建
- 统一的会话管理与异常处理方式,降低维护成本
- 与现有模块保持一致,团队学习成本低
负面影响
- 依赖 datai-salesforce-auth 模块,模块耦合增加
- 连接管理策略受 AbstractConnectionFactory 约束,灵活性下降
- 固定 source org 类型的限制需要在后续需求中单独处理
替代方案
方案 2:自定义工厂模式
- 技术选型:自定义 MetadataConnectionFactory,不继承 AbstractConnectionFactory
- 优点:可完全按需定制连接管理逻辑,灵活性高
- 缺点:需要自行实现连接缓存、会话检查与线程安全,开发与维护成本高
- 适用场景:现有基础设施无法满足特殊连接策略的场景
方案 3:每次调用创建新连接
- 技术选型:不使用连接缓存,每次操作创建新 MetadataConnection
- 优点:实现简单,避免缓存一致性问题
- 缺点:性能差,无法复用连接,Session 失效处理复杂
- 适用场景:调用频率极低、性能要求不高的场景
方案 4:引入连接池管理
- 技术选型:构建独立的 MetadataConnection 连接池
- 优点:连接复用更充分,可集中管理连接生命周期
- 缺点:实现复杂,且与现有 AbstractConnectionFactory 重复
- 适用场景:高并发、超高调用频率的场景