zolfran/eventflow-payment-service

GitHub: zolfran/eventflow-payment-service

一个基于 FastAPI 的事件驱动支付处理微服务,故意包含货币换算 bug 以演示生产环境的事件响应与自动化修复流程。

Stars: 0 | Forks: 0

# EventFlow 支付服务 EventFlow 事件驱动架构演示中的**系统 2**。 这是一个 FastAPI 服务,用于消费来自 Azure Service Bus 的 `OrderCreated` 事件并处理支付。该服务包含一个针对零小数位货币(JPY、KRW)的已知 bug,用于演示本案例的事件响应流程。 ## 架构角色 ``` Azure Service Bus → [Payment Service] → Payment Processing ↓ Application Insights ↓ Alert Rule (on error spike) ↓ Devin API (investigate + fix) ``` ## 功能 - 用于 `OrderCreated` 事件的 Azure Service Bus 消费者 - 带有货币换算的支付处理 - 健康检查和就绪检查 endpoint - 带有 correlation ID 的结构化日志记录 - 用于 Azure Monitor 的 OpenTelemetry 监测 ## Bug(演示叙事) 支付处理器通过将金额除以 100(假设所有货币都有两位小数),将金额从最小货币单位转换为显示金额。这对于 USD、EUR、GBP 是有效的,但对于像 JPY 和 KRW 这样的**零小数位货币则会失败**,因为它们的金额本身已经是基本单位。 当收到 JPY 订单时: - 金额 `15800`(日元)被除以 100 → `158.00` - 验证期望金额 ≥ 显示货币中的最小计费单位 - 转换后的金额未能通过下游一致性检查 → **未处理的异常** 此 bug 是故意存在于 `main` 分支上的,用于演示: 1. CI 测试通过(它们只覆盖了 USD/EUR) 2. 输入 JPY 时生产环境崩溃 3. Devin AI 调查日志并提交修复 PR ## 技术栈 - Python 3.11+ - FastAPI - Azure Service Bus SDK - OpenTelemetry + Azure Monitor - Pydantic v2 ## 本地开发 ``` pip install poetry poetry install cp .env.example .env # 使用您的值编辑 .env # 运行服务 poetry run uvicorn app.main:app --reload --port 8002 # 运行测试 poetry run pytest -v ``` ## 环境变量 | 变量 | 描述 | 默认值 | |---|---|---| | `AZURE_SERVICEBUS_CONNECTION_STRING` | Service Bus 连接字符串 | *(必填)* | | `AZURE_SERVICEBUS_QUEUE_NAME` | 订单事件的队列名称 | `order-events` | | `APPLICATIONINSIGHTS_CONNECTION_STRING` | App Insights 连接字符串 | *(可选)* | | `LOG_LEVEL` | 日志级别 | `INFO` | | `ENVIRONMENT` | 部署环境 | `development` | ## API Endpoints | 方法 | 路径 | 描述 | |---|---|---| | `GET` | `/health` | 健康检查 | | `GET` | `/ready` | 就绪检查 | | `GET` | `/api/payments` | 列出已处理的支付 | | `GET` | `/api/payments/{payment_id}` | 根据 ID 获取支付信息 | ## Docker ``` docker build -t eventflow-payment-service . docker run -p 8002:8002 --env-file .env eventflow-payment-service ```
标签:AV绕过, Azure, FastAPI, GET参数, OpenTelemetry, Python, 事件驱动, 支付处理, 故障演示, 无后门, 用户代理, 请求拦截, 逆向工具