ensi/initiator-propagation

0.3.0 2024-06-26 12:58 UTC

This package is auto-updated.

Last update: 2024-08-27 08:49:29 UTC


README

Latest Version on Packagist Tests Total Downloads

此包有助于将初始事件数据传播到其他后端服务 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

测试

  1. composer install
  2. composer test

安全漏洞

请参阅 我们的安全策略 了解如何报告安全漏洞。

许可证

MIT 许可证 (MIT)。有关更多信息,请参阅 许可证文件