Files
tyapi-server/事件系统调试指南.md
2025-08-02 02:54:21 +08:00

4.5 KiB
Raw Blame History

发票事件系统调试指南

🔍 调试概述

本指南帮助您调试发票邮箱发送的领域事件系统。

📋 事件流程

1. 事件发布流程

发票申请通过 → 聚合服务 → 事件发布器 → 事件总线 → 事件处理器 → 邮件服务

2. 关键组件

  • InvoiceAggregateService: 发票聚合服务,负责发布事件
  • InvoiceEventPublisher: 事件发布器,将事件发送到事件总线
  • MemoryEventBus: 内存事件总线,管理事件队列和工作协程
  • InvoiceEventHandler: 事件处理器,处理发票相关事件并发送邮件
  • QQEmailService: QQ邮件服务发送发票邮件

🚀 调试步骤

步骤1: 启动服务器

cd tyapi-server-gin
go run cmd/api/main.go

步骤2: 观察启动日志

启动时应该看到以下日志:

👷 事件工作协程启动 worker_id=0
👷 事件工作协程启动 worker_id=1
...
发票事件处理器注册成功 event_type=InvoiceFileUploaded handler=invoice-event-handler
所有事件处理器已注册

步骤3: 测试事件系统

使用调试脚本测试:

go run debug_event_test.go

步骤4: 观察事件处理日志

应该看到以下日志序列:

📤 开始发布发票文件上传事件
🚀 准备发布事件到事件总线
📤 开始发布事件
📋 找到事件处理器
🔄 处理事件
✅ 事件已加入异步队列
📥 工作协程接收到事件任务
🔧 开始处理事件任务
🔄 开始处理发票事件
📎 处理发票文件上传事件
📎 发票文件已上传事件开始处理
📋 事件数据解析开始
📄 事件数据序列化成功
✅ 事件数据解析成功
📧 开始发送发票邮件
📋 邮件数据构建完成
🚀 开始调用邮件服务发送邮件
✅ 发票邮件发送成功

🔧 常见问题排查

问题1: 事件处理器未注册

症状: 日志显示"没有找到事件处理器" 排查:

  1. 检查容器配置中的事件处理器注册
  2. 确认事件总线已启动
  3. 检查事件类型名称是否匹配

问题2: 事件数据解析失败

症状: 日志显示"解析发票文件上传事件失败" 排查:

  1. 检查事件结构体定义
  2. 确认事件数据序列化正确
  3. 验证事件字段类型匹配

问题3: 邮件发送失败

症状: 日志显示"发送发票邮件失败" 排查:

  1. 检查QQ邮箱配置
  2. 确认网络连接正常
  3. 验证邮箱授权码正确

问题4: 事件队列已满

症状: 日志显示"事件队列已满,丢弃事件" 排查:

  1. 增加事件队列容量
  2. 增加工作协程数量
  3. 检查是否有长时间阻塞的事件处理

📊 监控指标

事件总线统计

可以通过以下方式获取事件总线状态:

stats := eventBus.GetStats()
// 包含: running, worker_count, queue_length, queue_capacity, event_types, subscribers

关键日志标识

  • 🔄 事件处理开始
  • 📤 事件发布
  • 📥 事件接收
  • 成功处理
  • 处理失败
  • ⚠️ 警告信息

🛠️ 调试工具

1. 调试端点

访问 GET /api/v1/debug/events 获取事件系统状态

2. 日志级别

确保日志级别设置为 INFO 或 DEBUG 以查看详细日志

3. 测试脚本

使用 debug_event_test.go 模拟完整的发票申请流程

📝 日志分析

成功流程日志示例

2024/01/15 10:30:00 INFO 📤 开始发布发票文件上传事件 invoice_id=xxx
2024/01/15 10:30:00 INFO 🚀 准备发布事件到事件总线 event_type=InvoiceFileUploaded
2024/01/15 10:30:00 INFO 📤 开始发布事件 event_type=InvoiceFileUploaded
2024/01/15 10:30:00 INFO 📋 找到事件处理器 handler_count=1
2024/01/15 10:30:00 INFO ✅ 事件已加入异步队列
2024/01/15 10:30:01 INFO 📥 工作协程接收到事件任务
2024/01/15 10:30:01 INFO 🔄 开始处理发票事件
2024/01/15 10:30:01 INFO 📧 开始发送发票邮件
2024/01/15 10:30:02 INFO ✅ 发票邮件发送成功

失败流程日志示例

2024/01/15 10:30:00 INFO 📤 开始发布发票文件上传事件
2024/01/15 10:30:00 ERROR ❌ 发布发票文件上传事件到事件总线失败
2024/01/15 10:30:00 ERROR ❌ 事件数据为空
2024/01/15 10:30:00 ERROR ❌ 发送发票邮件失败

🎯 优化建议

  1. 增加监控: 添加事件处理时间、成功率等指标
  2. 错误重试: 配置合理的重试策略
  3. 日志聚合: 使用ELK等工具聚合和分析日志
  4. 性能调优: 根据负载调整工作协程数量和队列大小