ensi / initiator-propagation
初始事件传播
0.3.0
2024-06-26 12:58 UTC
Requires
- php: ^8.1
- ramsey/uuid: ^4.2
Requires (Dev)
- friendsofphp/php-cs-fixer: ^3.2
- pestphp/pest: ^1.22 || ^2.0
- phpstan/extension-installer: ^1.3
- phpstan/phpstan: ^1.11
- spaze/phpstan-disallowed-calls: ^2.15
README
此包有助于将初始事件数据传播到其他后端服务 Laravel 适配器
安装
您可以通过 composer 安装此包
composer require ensi/initial-event-propagation
版本兼容性
基本用法
首先,您需要创建初始事件数据并将其放置在持有者中
use Ensi\InitialEventPropagation\InitialEventHolder; use Ensi\InitialEventPropagation\InitialEventDTO; InitialEventHolder::getInstance() ->setInitialEvent( InitialEventDTO::fromScratch( userId: "1", userType: "admin", app: "mobile-api-gateway", entrypoint: "/api/v1/users/{id}" ) );
如果您不在初始入口点上下文中,需要从 X-Initial-Event
请求头中获取初始事件,而不是从头开始创建它
use Ensi\InitialEventPropagation\Config; use Ensi\InitialEventPropagation\InitialEventHolder; use Ensi\InitialEventPropagation\InitialEventDTO; InitialEventHolder::getInstance() ->setInitialEvent( InitialEventDTO::fromSerializedString($request->header(Config::REQUEST_HEADER)) );
接下来,从持有者中提取 DTO(InitialEventHolder::getInstance()->getInitialEvent()
)并将其传递给任何后续出站请求(Guzzle、RabbitMQ、Kafka 等)。例如
use Ensi\InitialEventPropagation\Config; use Ensi\InitialEventPropagation\InitialEventHolder; function some_middleware(callable $handler) { return function (RequestInterface $request, $options) use ($handler) { $inititiator = InitialEventHolder::getInstance()->getInitialEvent(); return $handler( $inititiator ? $request->withHeader(Config::REQUEST_HEADER, $inititiator->serialize()) : $request, $options ); }; }
贡献
有关详细信息,请参阅 CONTRIBUTING
测试
- composer install
- composer test
安全漏洞
请参阅 我们的安全策略 了解如何报告安全漏洞。
许可证
MIT 许可证 (MIT)。有关更多信息,请参阅 许可证文件