datai/datai-scenes/datai-scene-salesforce/docs/design/0001-salesforce-cdc-realtime-sync.md
Kris 517284b614 feat: 实现Salesforce Pub/Sub API实时数据同步
主要变更:
- 新增PubSubConnectionFactory连接工厂,提供Pub/Sub API连接管理
- 新增PubSubEventSubscriberImpl实现,支持Pub/Sub API事件订阅
- 更新EventProcessorImpl,添加事件批次处理能力
- 更新RealtimeSyncService,使用Pub/Sub API替代CDC实现
- 更新Authentication.canvas架构文档,添加Pub/Sub组件
- 优化同步配置管理和实时同步日志功能

技术改进:
- 提升实时同步性能和可靠性
- 支持批量事件处理,提高吞吐量
- 完善连接工厂模式,统一管理连接生命周期
2026-01-12 10:31:25 +08:00

169 lines
7.4 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Design 模板
## 设计信息
- **设计名称**: Salesforce Pub/Sub API实时同步设计
- **设计类型**: 架构设计 + 数据结构设计
- **设计日期**: 2026-01-10
- **设计版本**: v1.1.0
- **设计作者**: 系统管理员
## 输入引用
引用相关的 docs 文档链接:
- [需求文档](../requirements/0001-salesforce-realtime-sync.md) - Salesforce数据及时同步至本地数据库
- [架构决策](../decisions/adr/0001-salesforce-cdc-sync.md) - Salesforce Pub/Sub API同步方案
- [设计文档模板](../design/0000-template.md) - 设计文档模板
## Context Maps
强制列出本次设计依赖的 Canvas 文件:
- [Authentication.canvas](../Authentication.canvas) - 项目架构视觉化展示
- **相关节点**: [集成任务](node_integration_task) - 处理Salesforce的定时同步任务
- **相关节点**: [SessionManager](node_session_manager_detail) - 会话管理,提供登录服务
- **相关节点**: [Salesforce连接类型](node_integration_connections) - 提供与Salesforce的各种连接方式
## 设计目标
明确描述此设计的目标和预期效果,包括要解决的问题、实现的功能或达成的结果。
本设计的目标是实现Salesforce Pub/Sub API 实时同步功能通过利用Salesforce Pub/Sub API订阅Salesforce事件总线实时捕获数据变更并同步至本地数据库。设计一套可复用的实时同步代码支持多个对象同时使用采用事件驱动架构确保数据的及时同步和可靠性。
## 设计内容
### 概述
简要描述设计的整体思路和架构。
本设计采用事件驱动架构通过Salesforce Pub/Sub API订阅Salesforce事件总线实现数据的实时同步。核心组件包括配置管理、事件订阅、事件处理、数据同步和日志记录。设计一套可复用的实时同步代码支持多个对象同时使用通过配置管理控制对象的同步状态。
### 详细设计
#### 1. 同步配置管理
- **设计说明**: 基于现有的DataiConfiguration表存储同步配置通过is_realtime_sync字段tinyint(1)类型)控制对象是否开启实时同步
- **设计图**: 配置管理流程图
- **关键元素**:
- DataiConfiguration表存储同步配置信息
- is_realtime_sync字段tinyint(1)类型,控制对象是否开启实时同步
- objectController提供变更实时同步状态的方法
- batch表存储全量拉取记录
- **实现细节**:
- 在objectController中增加updateRealtimeSyncStatus方法
- 方法中调用Salesforce API查询PlatformEventChannelMember表检查是否启用实时同步
- 检查本地数据库中的batch表是否已经全量拉取存量数据若没有则提示但仍可启用Pub/Sub API
- 根据查询结果更新对象的实时同步状态
- 同步状态变更时,更新缓存中的配置信息
#### 2. 实时数据同步
- **设计说明**: 实现Salesforce Pub/Sub API事件订阅和处理采用事件驱动架构支持多个对象复用同一套代码。事件处理采用异步执行方式upsert操作参考DataiIntegrationBatchServiceImpl中的processQueryResult方法实现。利用Pub/Sub API的自动重连和消息重试机制提高系统可靠性。
- **设计图**: 实时数据同步流程图
- **关键元素**:
- PubSubClientPub/Sub API客户端订阅Salesforce事件总线
- EventProcessor事件处理器解析和处理捕获的变更事件
- DataSynchronizer数据同步器将变更数据同步至本地数据库
- ObjectRegistry对象注册表管理所有启用实时同步的对象
- **实现细节**:
- 使用Salesforce Pub/Sub API客户端库订阅事件总线
- 事件处理采用异步执行方式,提高处理效率
- 数据同步采用upsert操作参考DataiIntegrationBatchServiceImpl中的processQueryResult方法实现
- 利用Pub/Sub API的自动重连和消息重试机制提高系统可靠性
- 通过配置管理控制对象的同步状态,实现多对象复用
#### 3. 实时同步日志表
- **设计说明**: 设计实时同步日志表,记录同步操作的详细信息
- **设计图**: 实时同步日志表结构
- **关键元素**:
- datai_integration_realtime_sync_log表记录同步操作的详细信息
- 字段包括id、objectName、recordId、operationType、changeData、syncStatus、errorMessage、retryCount、salesforceTimestamp、syncTimestamp
- **实现细节**:
- 已实现DataiIntegrationRealtimeSyncLog实体类
- 已实现DataiIntegrationRealtimeSyncLogController控制器
- changeData字段存储变更数据的字符串格式
- 提供日志查询、导出和详情查看功能
- 对应SQL文件create-realtime-sync-log-table.sql
#### 4. 异常处理与重试
- **设计说明**: 实现事件处理和同步操作的异常处理机制。暂不考虑失败重试。
- **设计图**: 异常处理流程图
- **关键元素**:
- ExceptionHandler异常处理器处理各类异常
- **实现细节**:
- 异常分类处理,不同类型的异常采用不同的处理策略
- 记录异常信息,便于后续分析和处理
## 约束
列出设计时的约束条件,例如:
- 技术栈限制基于现有的Spring Boot3+Vue3技术栈
- 性能要求:同步操作不能影响系统的正常运行
- 安全性要求:确保同步过程中的数据安全
- 兼容性要求支持不同版本的Salesforce API
- 其他约束需要遵守Salesforce的API使用限制
## Rule Set
"请严格参考 @Authentication.canvas 中的状态机转移逻辑,不要自行发挥。"
**具体规则**
- 必须使用 Canvas 中定义的类名和方法名
- 必须遵循 Canvas 中定义的调用关系
- 必须参考 Canvas 中的流程图逻辑
## 验收标准
定义验证设计质量的具体标准,例如:
- 功能完整性:所有同步功能能够正常工作
- 设计合理性:设计符合架构设计原则
- 实现可行性:设计方案能够在现有技术栈中实现
- 性能指标:同步操作的执行时间在可接受范围内
- 用户体验:同步操作的操作界面友好易用
## 风险
识别设计可能带来的风险,例如:
- 技术实现风险Salesforce API的变更可能影响同步功能
- 性能风险:事件处理可能成为性能瓶颈
- 兼容性风险不同版本的Salesforce API可能存在差异
- 维护风险:系统复杂度增加可能影响维护
- 其他潜在风险:网络连接不稳定可能影响同步可靠性
## 设计变更记录
| 日期 | 变更内容 | 变更原因 | 变更人 | 审核人 |
|------|---------|---------|--------|--------|
| 2026-01-09 | 创建设计文档 | 初始设计 | 系统管理员 | - |
## 使用指南
### 适用场景
描述设计适用的场景和条件。
本设计适用于需要实时同步Salesforce数据至本地数据库的场景特别是对数据实时性要求较高的业务系统。
### 实施步骤
提供设计实施的具体步骤。
1. 创建实时同步日志表
2. 修改对象表添加is_realtime_sync字段
3. 在objectController中增加updateRealtimeSyncStatus方法
4. 实现事件订阅和处理逻辑
5. 配置对象的实时同步状态
6. 启动事件订阅服务
### 维护建议
提供设计维护的建议和注意事项。
- 定期检查同步日志,监控同步状态
- 注意Salesforce API限流合理控制事件处理频率
- 确保系统有足够的资源处理高并发的事件流
- 定期备份同步配置和日志数据
- 关注Salesforce API的变更及时更新事件处理逻辑