202 lines
6.1 KiB
Markdown
202 lines
6.1 KiB
Markdown
|
|
# 增强的实时通信服务 (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 | 是否启用消息持久化 |
|
|||
|
|
|
|||
|
|
## 使用示例
|
|||
|
|
|
|||
|
|
### 基本用法
|
|||
|
|
|
|||
|
|
```csharp
|
|||
|
|
// 注入服务
|
|||
|
|
private readonly IRealTimeCommunicationService _communicationService;
|
|||
|
|
|
|||
|
|
// 发送通知(自动应用配置)
|
|||
|
|
await _communicationService.SendNotificationToUserAsync(
|
|||
|
|
"user-001",
|
|||
|
|
"系统通知",
|
|||
|
|
"info",
|
|||
|
|
"重要提醒",
|
|||
|
|
transformerSubstationId // 可选:指定变电站ID获取特定配置
|
|||
|
|
);
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 获取配置信息
|
|||
|
|
|
|||
|
|
```csharp
|
|||
|
|
// 获取当前配置
|
|||
|
|
var config = await _communicationService.GetCommunicationConfigurationAsync();
|
|||
|
|
|
|||
|
|
// 获取健康状况
|
|||
|
|
var health = await _communicationService.GetCommunicationHealthStatusAsync();
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 高级功能
|
|||
|
|
|
|||
|
|
```csharp
|
|||
|
|
// 发送告警(包含故障转移和超时控制)
|
|||
|
|
await _communicationService.SendAlarmAsync(
|
|||
|
|
alarmData,
|
|||
|
|
"high",
|
|||
|
|
targetUsers,
|
|||
|
|
transformerSubstationId
|
|||
|
|
);
|
|||
|
|
|
|||
|
|
// 发送实时数据(应用压缩和持久化配置)
|
|||
|
|
await _communicationService.SendDataUpdateAsync(
|
|||
|
|
"sensor_data",
|
|||
|
|
sensorData,
|
|||
|
|
null, // 广播
|
|||
|
|
transformerSubstationId
|
|||
|
|
);
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 配置继承机制
|
|||
|
|
|
|||
|
|
服务支持三级配置继承:
|
|||
|
|
|
|||
|
|
1. **变电站特定配置** - 优先级最高
|
|||
|
|
2. **全局配置** - 当变电站配置不存在时使用
|
|||
|
|
3. **系统默认值** - 当数据库配置不存在时使用
|
|||
|
|
|
|||
|
|
```csharp
|
|||
|
|
// 获取配置的优先级顺序
|
|||
|
|
var config = await _configurationCacheService.GetWebSocketPriorityAsync(stationId);
|
|||
|
|
// 1. 查找 stationId 对应的配置
|
|||
|
|
// 2. 如果不存在,查找全局配置 (TransformerSubstationId = null)
|
|||
|
|
// 3. 如果仍不存在,使用默认值
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 故障转移机制
|
|||
|
|
|
|||
|
|
### 自动故障转移流程
|
|||
|
|
|
|||
|
|
1. **主要方式尝试**: 根据配置优先级选择 WebSocket 或 SignalR
|
|||
|
|
2. **重试机制**: 失败时按配置的重试次数进行重试
|
|||
|
|
3. **备用方式**: 如果启用自动故障转移,切换到备用通信方式
|
|||
|
|
4. **异常处理**: 所有方式都失败时抛出聚合异常
|
|||
|
|
|
|||
|
|
```csharp
|
|||
|
|
// 故障转移配置示例
|
|||
|
|
{
|
|||
|
|
"IsWebSocketPriority": true, // 优先WebSocket
|
|||
|
|
"EnableAutoFailover": true, // 启用故障转移
|
|||
|
|
"FailoverRetryCount": 3, // 重试3次
|
|||
|
|
"WebSocketTimeoutSeconds": 15, // WebSocket超时15秒
|
|||
|
|
"SignalRTimeoutSeconds": 30 // SignalR超时30秒
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 性能优化
|
|||
|
|
|
|||
|
|
### 缓存机制
|
|||
|
|
- **配置缓存**: 使用 MemoryCache 缓存配置,避免频繁数据库查询
|
|||
|
|
- **缓存过期**: 30分钟绝对过期,15分钟滑动过期
|
|||
|
|
- **缓存预热**: 系统启动时预加载常用配置
|
|||
|
|
|
|||
|
|
### 消息优化
|
|||
|
|
- **压缩支持**: 大消息自动压缩,减少网络传输
|
|||
|
|
- **批量发送**: 支持批量用户消息发送
|
|||
|
|
- **队列管理**: 防止消息队列溢出
|
|||
|
|
|
|||
|
|
## 监控和调试
|
|||
|
|
|
|||
|
|
### 健康检查
|
|||
|
|
```csharp
|
|||
|
|
var health = await _communicationService.GetCommunicationHealthStatusAsync();
|
|||
|
|
// 返回:
|
|||
|
|
// - 配置信息
|
|||
|
|
// - 连接状态
|
|||
|
|
// - 在线用户统计
|
|||
|
|
// - 服务可用性
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 日志记录
|
|||
|
|
服务会记录详细的操作日志:
|
|||
|
|
- 配置加载和应用
|
|||
|
|
- 通信方式选择
|
|||
|
|
- 故障转移过程
|
|||
|
|
- 性能指标
|
|||
|
|
- 错误信息
|
|||
|
|
|
|||
|
|
## 最佳实践
|
|||
|
|
|
|||
|
|
### 1. 配置管理
|
|||
|
|
- 为不同环境设置不同的配置
|
|||
|
|
- 定期检查和优化配置参数
|
|||
|
|
- 使用配置缓存预热提升性能
|
|||
|
|
|
|||
|
|
### 2. 故障处理
|
|||
|
|
- 启用自动故障转移提高可靠性
|
|||
|
|
- 合理设置重试次数避免过度重试
|
|||
|
|
- 监控故障转移频率
|
|||
|
|
|
|||
|
|
### 3. 性能优化
|
|||
|
|
- 根据网络环境调整超时时间
|
|||
|
|
- 在高并发场景下启用消息压缩
|
|||
|
|
- 合理设置连接数和队列长度限制
|
|||
|
|
|
|||
|
|
### 4. 监控运维
|
|||
|
|
- 定期检查通信服务健康状况
|
|||
|
|
- 监控在线用户数量变化
|
|||
|
|
- 分析日志识别潜在问题
|
|||
|
|
|
|||
|
|
## 扩展性
|
|||
|
|
|
|||
|
|
服务设计支持未来扩展:
|
|||
|
|
- 新增通信协议支持
|
|||
|
|
- 自定义故障转移策略
|
|||
|
|
- 更多消息优化选项
|
|||
|
|
- 高级监控指标
|
|||
|
|
|
|||
|
|
## 注意事项
|
|||
|
|
|
|||
|
|
1. **配置更新**: 配置更新后需要清除相关缓存
|
|||
|
|
2. **网络环境**: 根据实际网络环境调整超时和重试参数
|
|||
|
|
3. **资源消耗**: 启用压缩和持久化会增加CPU和存储消耗
|
|||
|
|
4. **兼容性**: 确保客户端支持所选的通信协议
|
|||
|
|
|
|||
|
|
## 相关文档
|
|||
|
|
|
|||
|
|
- [CommunicationConfiguration 配置管理](./CommunicationConfiguration_README.md)
|
|||
|
|
- [通信配置系统实现总结](../通信配置系统实现总结.md)
|
|||
|
|
- [API 文档](./API_Documentation.md)
|