tourze / request-id-bundle
Request ID Generator for Symfony
Installs: 15
Dependents: 1
Suggesters: 0
Security: 0
Stars: 0
Watchers: 1
Forks: 0
Open Issues: 0
Type:symfony-bundle
Requires
- php: ^8.1
- doctrine/doctrine-bundle: ^2.13
- doctrine/orm: ^2.17 || ^3.0
- monolog/monolog: ^3.0
- symfony/console: ^6.4
- symfony/framework-bundle: ^6.4
- symfony/messenger: ^6.4
- symfony/uid: ^6.4
- tourze/backtrace-helper: 0.0.*
Requires (Dev)
- phpstan/phpstan: ^2.1
- phpunit/phpunit: ^10.0
This package is auto-updated.
Last update: 2025-04-14 11:22:21 UTC
README
一个基于 Symfony 的请求 ID 管理包,用于在整个应用程序中跟踪和关联请求。支持 HTTP 请求、消息队列和命令行命令。
依赖
- AopCoroutineBundle
核心功能
1. 请求 ID 生成和存储
- 基于 UUID 的请求 ID 生成(使用 Base58 编码以获得更短的 ID)
- 协程安全的请求 ID 存储
- 自动重置机制
2. HTTP 请求集成
自动在 HTTP 请求和响应中添加请求 ID:
# config/packages/request_id.yaml request_id: request_header: 'Request-Id' # 默认 response_header: 'Request-Id' # 默认 trust_request: true # 是否信任请求中的 ID
3. 消息队列集成
自动在消息队列中传递请求 ID:
// 消息会自动携带当前请求的 ID $messageBus->dispatch(new MyMessage()); // 在消费者中可以访问原始请求的 ID $requestId = $requestIdStorage->getRequestId();
4. 命令行支持
为命令行命令生成唯一的请求 ID:
# 执行命令时会自动生成类似 "CLIxxxxx" 的请求 ID
$ php bin/console my:command
5. 日志集成
自动在日志记录中包含请求 ID:
// 日志中会自动包含请求 ID $logger->info('Something happened');
工作原理
-
HTTP 请求:
- 检查请求头中是否存在请求 ID
- 如果存在且配置为信任,则使用该 ID
- 否则生成新的请求 ID
- 在响应头中返回请求 ID
-
消息队列:
- 发送消息时自动添加 RequestIdStamp
- 消费消息时恢复原始请求 ID
- 消费完成后自动清理
-
命令行:
- 命令开始时生成带 "CLI" 前缀的请求 ID
- 命令结束时自动清理
性能优化
- 使用 Base58 编码生成更短的 ID
- 协程支持,确保线程安全
- 自动清理机制,防止内存泄漏
重要说明
- 请求 ID 格式:
- HTTP: UUID Base58 编码
- CLI: "CLI" + UUID Base58 编码
- 存储机制基于协程,确保请求隔离
- 自动集成到 Symfony 的日志系统
- 支持分布式系统中的请求跟踪
调试建议
- 检查请求/响应头中的请求 ID
- 在日志中搜索特定请求 ID
- 使用请求 ID 关联消息队列任务
扩展开发
- 自定义请求 ID 生成器
- 添加额外的请求 ID 传播机制
- 扩展日志处理器功能