oat-sa/lib-correlation-ids-guzzle

OAT Correlation Ids Guzzle Library

0.3.0 2024-01-09 08:30 UTC

README

基于 correlation ids library 的 Guzzle 中间件,用于关联 ID 的 PHP 库。

目录

安装

$ composer require oat-sa/lib-correlation-ids-guzzle

原理

此库提供了一个可用的 guzzle 中间件,它会将从 关联 ID 注册表 中获取的关联 ID 作为请求头传递。

注意

  • 当前进程的关联 ID 将作为父关联 ID 传递,
  • 根关联 ID 也将被传递。

有关调用链的更多详细信息,请参阅 关联 ID 库 文档。

使用方法

使用提供的工厂

GuzzleClientFactory 为您创建一个已经启用中间件的 Guzzle 客户端

<?php declare(strict_types=1);

use OAT\Library\CorrelationIds\Registry\CorrelationIdsRegistry;
use OAT\Library\CorrelationIds\Registry\CorrelationIdsRegistryInterface;
use OAT\Library\CorrelationIdsGuzzle\Factory\GuzzleClientFactory;
use OAT\Library\CorrelationIdsGuzzle\Middleware\CorrelationIdsGuzzleMiddleware;

/** @var CorrelationIdsRegistryInterface $registry */
$registry = new CorrelationIdsRegistry(...);

$clientFactory = new GuzzleClientFactory(new CorrelationIdsGuzzleMiddleware($registry)));

$client = $clientFactory->create(['some' => 'options']);

...

$client->request('GET', 'http://example.com'); // Will forward correlation ids as request headers automatically.

手动

您需要按照以下方式将 CorrelationIdsGuzzleMiddleware 推送到您的处理程序堆栈

<?php declare(strict_types=1);

use GuzzleHttp\Client;
use GuzzleHttp\HandlerStack;
use GuzzleHttp\Middleware;
use OAT\Library\CorrelationIds\Registry\CorrelationIdsRegistry;
use OAT\Library\CorrelationIds\Registry\CorrelationIdsRegistryInterface;
use OAT\Library\CorrelationIdsGuzzle\Middleware\CorrelationIdsGuzzleMiddleware;

/** @var CorrelationIdsRegistryInterface $registry */
$registry = new CorrelationIdsRegistry(...);

$handlerStack = HandlerStack::create();
$handlerStack->push(Middleware::mapRequest(new CorrelationIdsGuzzleMiddleware($registry)));

$client = new Client(['handler' => $handlerStack]);

...

$client->request('GET', 'http://example.com'); // Will forward correlation ids as request headers automatically.

注意:您可以通过提供自己的 CorrelationIdsHeaderNamesProviderInterface 实现来自定义日志上下文键名,并将其传递给 CorrelationIdsGuzzleMiddleware 构造函数。

测试

运行测试

$ vendor/bin/phpunit

注意:有关可用的测试套件,请参阅 phpunit.xml.dist