SOMS/src/Documentation/EnhancedRealTimeCommunicationService_README.md
2025-07-16 09:20:13 +08:00

6.1 KiB
Raw Blame History

增强的实时通信服务 (Enhanced RealTimeCommunicationService)

概述

RealTimeCommunicationService 已经完全集成了 CommunicationConfiguration 中的所有配置项,提供了配置驱动的实时通信功能。该服务现在支持动态配置、智能故障转移、超时控制、消息压缩、持久化等高级功能。

主要增强功能

1. 配置驱动的通信方式选择

  • WebSocket优先级: 根据配置自动选择 WebSocket 或 SignalR 作为主要通信方式
  • 智能故障转移: 当主要通信方式失败时,自动切换到备用方式
  • 可配置重试: 支持配置重试次数和重试策略

2. 超时控制

  • WebSocket超时: 独立配置 WebSocket 连接超时时间
  • SignalR超时: 独立配置 SignalR 连接超时时间
  • 动态超时应用: 每次通信都会应用最新的超时配置

3. 消息优化

  • 消息压缩: 根据配置启用/禁用消息压缩
  • 消息持久化: 支持重要消息的持久化存储
  • 队列管理: 配置消息队列最大长度

4. 连接管理

  • 并发连接限制: 配置最大并发连接数
  • 心跳检测: 可配置的心跳检测间隔
  • 健康状况监控: 实时监控通信服务健康状况

配置项说明

配置项 类型 默认值 说明
IsWebSocketPriority bool false 是否优先使用WebSocket
WebSocketTimeoutSeconds int 30 WebSocket连接超时时间(秒)
SignalRTimeoutSeconds int 30 SignalR连接超时时间(秒)
EnableAutoFailover bool true 是否启用自动故障转移
FailoverRetryCount int 3 故障转移重试次数
HeartbeatIntervalSeconds int 30 心跳检测间隔(秒)
EnableMessageCompression bool false 是否启用消息压缩
MaxConcurrentConnections int 1000 最大并发连接数
MaxMessageQueueLength int 10000 消息队列最大长度
EnableMessagePersistence bool false 是否启用消息持久化

使用示例

基本用法

// 注入服务
private readonly IRealTimeCommunicationService _communicationService;

// 发送通知(自动应用配置)
await _communicationService.SendNotificationToUserAsync(
    "user-001",
    "系统通知",
    "info",
    "重要提醒",
    transformerSubstationId // 可选指定变电站ID获取特定配置
);

获取配置信息

// 获取当前配置
var config = await _communicationService.GetCommunicationConfigurationAsync();

// 获取健康状况
var health = await _communicationService.GetCommunicationHealthStatusAsync();

高级功能

// 发送告警(包含故障转移和超时控制)
await _communicationService.SendAlarmAsync(
    alarmData,
    "high",
    targetUsers,
    transformerSubstationId
);

// 发送实时数据(应用压缩和持久化配置)
await _communicationService.SendDataUpdateAsync(
    "sensor_data",
    sensorData,
    null, // 广播
    transformerSubstationId
);

配置继承机制

服务支持三级配置继承:

  1. 变电站特定配置 - 优先级最高
  2. 全局配置 - 当变电站配置不存在时使用
  3. 系统默认值 - 当数据库配置不存在时使用
// 获取配置的优先级顺序
var config = await _configurationCacheService.GetWebSocketPriorityAsync(stationId);
// 1. 查找 stationId 对应的配置
// 2. 如果不存在,查找全局配置 (TransformerSubstationId = null)
// 3. 如果仍不存在,使用默认值

故障转移机制

自动故障转移流程

  1. 主要方式尝试: 根据配置优先级选择 WebSocket 或 SignalR
  2. 重试机制: 失败时按配置的重试次数进行重试
  3. 备用方式: 如果启用自动故障转移,切换到备用通信方式
  4. 异常处理: 所有方式都失败时抛出聚合异常
// 故障转移配置示例
{
    "IsWebSocketPriority": true,     // 优先WebSocket
    "EnableAutoFailover": true,      // 启用故障转移
    "FailoverRetryCount": 3,         // 重试3次
    "WebSocketTimeoutSeconds": 15,   // WebSocket超时15秒
    "SignalRTimeoutSeconds": 30      // SignalR超时30秒
}

性能优化

缓存机制

  • 配置缓存: 使用 MemoryCache 缓存配置,避免频繁数据库查询
  • 缓存过期: 30分钟绝对过期15分钟滑动过期
  • 缓存预热: 系统启动时预加载常用配置

消息优化

  • 压缩支持: 大消息自动压缩,减少网络传输
  • 批量发送: 支持批量用户消息发送
  • 队列管理: 防止消息队列溢出

监控和调试

健康检查

var health = await _communicationService.GetCommunicationHealthStatusAsync();
// 返回:
// - 配置信息
// - 连接状态
// - 在线用户统计
// - 服务可用性

日志记录

服务会记录详细的操作日志:

  • 配置加载和应用
  • 通信方式选择
  • 故障转移过程
  • 性能指标
  • 错误信息

最佳实践

1. 配置管理

  • 为不同环境设置不同的配置
  • 定期检查和优化配置参数
  • 使用配置缓存预热提升性能

2. 故障处理

  • 启用自动故障转移提高可靠性
  • 合理设置重试次数避免过度重试
  • 监控故障转移频率

3. 性能优化

  • 根据网络环境调整超时时间
  • 在高并发场景下启用消息压缩
  • 合理设置连接数和队列长度限制

4. 监控运维

  • 定期检查通信服务健康状况
  • 监控在线用户数量变化
  • 分析日志识别潜在问题

扩展性

服务设计支持未来扩展:

  • 新增通信协议支持
  • 自定义故障转移策略
  • 更多消息优化选项
  • 高级监控指标

注意事项

  1. 配置更新: 配置更新后需要清除相关缓存
  2. 网络环境: 根据实际网络环境调整超时和重试参数
  3. 资源消耗: 启用压缩和持久化会增加CPU和存储消耗
  4. 兼容性: 确保客户端支持所选的通信协议

相关文档