一个基于 Golang 开发的外卖订单聚合、打印和超时监控系统。该系统可以同时监听多个外卖平台(美团、饿了么)的订单,统一处理后厨打印,并实时监控订单超时情况。
- 并发处理:使用 Goroutine 和 Channel 实现高效的并发订单处理
- 统一格式:将不同平台的订单格式统一转换为标准结构
- 智能队列:使用 Worker Pool 模式控制打印并发数,防止系统过载
- 实时监控:自动检测订单超时并发送报警
- 高性能日志:使用 Zap 进行结构化日志记录
- 配置灵活:使用 Viper 支持 YAML 配置文件
- 数据持久化:使用 Redis 存储订单状态
系统包含三个核心模块:
- 模拟从不同外卖平台(美团、饿了么)接收订单
- 使用 Channel 汇总所有订单
- 将不同平台的 JSON 格式转换为统一的
Order结构体 - 技术点:struct 标签、json.Unmarshal、Goroutine
- 使用协程池限制并发数,防止瞬间订单量过大
- 模拟将订单发送到后厨打印机
- 将订单状态保存到 Redis
- 技术点:sync.WaitGroup、buffered channels、Worker Pool 模式
- 定期检查所有订单状态
- 如果订单在 15 分钟内没有被接单或出餐,自动发送报警
- 技术点:time.Ticker、context.WithTimeout
- 语言:Golang 1.24+
- 日志:Zap(高性能结构化日志)
- 配置:Viper(支持 YAML/JSON)
- 存储:Redis(订单状态存储)
- 并发:Goroutine + Channel
- Go 1.24 或更高版本
- Redis 服务器(用于存储订单状态)
go mod download确保 Redis 服务正在运行:
# 使用 Docker 启动 Redis(可选)
docker run -d -p 6379:6379 redis:latest复制并编辑 config.yaml:
environment: development
log_level: info
order_channel_buffer: 100
printer_workers: 5
order_timeout: 15m
redis:
addr: localhost:6379
password: ""
db: 0
platforms:
- name: meituan
enabled: true
interval: 10
- name: eleme
enabled: true
interval: 15go run main.go系统启动后会:
- 开始从配置的平台接收模拟订单
- 将订单放入打印队列处理
- 监控订单超时情况
behappy-delivery-order-guard/
├── main.go # 程序入口
├── config.yaml # 配置文件
├── go.mod # Go 模块定义
├── internal/
│ ├── config/ # 配置管理
│ │ └── config.go
│ ├── ingestion/ # 订单接收器
│ │ ├── ingester.go
│ │ └── order.go
│ ├── printer/ # 打印队列
│ │ └── printer.go
│ └── watcher/ # 超时监控
│ └── watcher.go
└── README.md
| 配置项 | 说明 | 默认值 |
|---|---|---|
environment |
运行环境 | development |
log_level |
日志级别 | info |
order_channel_buffer |
订单通道缓冲区大小 | 100 |
printer_workers |
打印工作协程数 | 5 |
order_timeout |
订单超时时间 | 15m |
redis.addr |
Redis 地址 | localhost:6379 |
platforms[].enabled |
是否启用平台 | true |
platforms[].interval |
订单接收间隔(秒) | 10 |
pending:待处理(已打印,等待接单)accepted:已接单preparing:制作中ready:已出餐timeout:超时
系统会定期检查所有订单状态,如果订单在配置的超时时间内(默认 15 分钟)没有被接单或出餐,会:
- 记录警告日志
- 更新订单状态为
timeout - 输出报警信息(可扩展为发送到钉钉、企业微信、邮件等)
报警信息示例:
⚠️ 订单超时报警
订单ID: MT1234567890
订单号: MT12345678
平台: meituan
客户: 张先生 (13800138000)
金额: ¥52.00
已等待: 15m30s
超时阈值: 15m0s
请及时处理!
这个项目涵盖了以下 Golang 核心概念:
-
并发编程
- Goroutine 的使用
- Channel 的通信
- sync.WaitGroup 的同步
-
数据结构
- struct 标签的使用
- JSON 序列化/反序列化
-
设计模式
- Worker Pool 模式
- 生产者-消费者模式
-
标准库
- context 包的使用
- time 包的时间处理
- encoding/json 的 JSON 处理
-
第三方库
- Zap 日志库
- Viper 配置库
- Redis 客户端
- 集成真实的打印机 API
- 添加 Prometheus 监控指标
- 实现钉钉/企业微信报警
- 添加订单状态更新 API
- 支持更多外卖平台
- 添加数据库持久化
- 实现订单统计和报表
MIT License
欢迎提交 Issue 和 Pull Request!