dev-master
9999999-dev https://github.com/proemergotech/correlate-php-guzzleAdds correlation ID to Guzzle requests.
MIT
The Requires
The Development Requires
laravel psr-7 log microservice lumen uuid dispatcher guzzle slim correlate
Adds correlation ID to Guzzle requests.
It's very difficult to track a request accross the system when we are working with microservices. We came out a solution for that. We generate a unique version 4 uuid for every request and every service passes this id via request header to other services. We call this correlation ID., (*1)
composer require proemergotech/correlate-php-guzzle
This example assumes you are already using proemergotech/correlate-php-psr-7 middleware!, (*2)
use GuzzleHttp\Client; use GuzzleHttp\HandlerStack; use GuzzleHttp\Handler\CurlHandler; use ProEmergotech\Correlate\Correlate; use ProEmergotech\Correlate\Guzzle\GuzzleCorrelateMiddleware; use Monolog\Logger; $app = new \Slim\App(); $container = $app->getContainer(); $container['logger'] = function($container) { return new Logger(); }; $container['httpClient'] = function ($container) { $cid = $container['request']->getAttribute( Correlate::getParamName() ); $stack = HandlerStack::create(new CurlHandler()); $stack->push(new GuzzleCorrelateMiddleware($cid)); return new Client(['handler' => $stack]); }; // See "proemergotech/correlate-php-psr-7" project $app->add(new \ProEmergotech\Correlate\Psr7\Psr7CorrelateMiddleware($container['logger'])); /** * Example GET route * * @param \Psr\Http\Message\ServerRequestInterface $req PSR7 request * @param \Psr\Http\Message\ResponseInterface $res PSR7 response * @param array $args Route parameters * * @return \Psr\Http\Message\ResponseInterface */ $app->get('/foo', function ($req, $res, $args) { $httpClient = $this->get('httpClient'); $httpClient->request('GET', 'http://httpbin.org/'); // You can override correlation id here $httpClient->request('GET', 'http://httpbin.org/', [ 'headers' => [ Correlate::getHeaderName() => Correlate::id() ], ]); return $res; });
Write a service provider to register a guzzle instance for future usage. Create a handler stack and push the middleware to it., (*3)
This example assumes you are already using proemergotech/correlate-php-laravel middleware!, (*4)
<?php namespace App\Providers; use Illuminate\Support\ServiceProvider; use ProEmergotech\Correlate\Correlate; use ProEmergotech\Correlate\Guzzle\GuzzleCorrelateMiddleware; use GuzzleHttp\Client; use GuzzleHttp\HandlerStack; class GuzzleHttpClientProvider extends ServiceProvider { public function register() { $this->app->bind('guzzle', function () { // Determine correlation id. $cid = $this->app['request']->getCorrelationId(); // If you use proemergotech/correlate-php-laravel middleware // identical but without macros $cid = $this->app['request']->headers->get(Correlate::getHeaderName()); $stack = HandlerStack::create(new CurlHandler()); $stack->push(new GuzzleCorrelateMiddleware($cid)); $config = isset($this->app['config']['guzzle']) ? $this->app['config']['guzzle'] : []; $config['handler'] = $stack; return new Client($config); }); } }
Add serverice provider to config/app.php in your Laravel project., (*5)
// config/app.php 'providers' => [ ... \App\Providers\GuzzleHttpClientProvider::class, ],
Write a service provider to register a guzzle instance for future usage. Create a handler stack and push the middleware to it., (*6)
This example assumes you are already using proemergotech/correlate-php-laravel middleware!, (*7)
// bootstrap/app.php // ... $app->bind('guzzle', function () use ($app) { // Determine correlation id. $cid = $app['request']->getCorrelationId(); // If you use proemergotech/correlate-php-laravel middleware // identical but without macros $cid = $this->app['request']->headers->get( \ProEmergotech\Correlate\Correlate::getHeaderName() ); $stack = HandlerStack::create(new CurlHandler()); $stack->push(new \ProEmergotech\Correlate\Guzzle\GuzzleCorrelateMiddleware($cid)); return new Client([ 'handler' => $stack ]); }); // ...
See CONTRIBUTING.md
file., (*8)
This package developed by Soma Szélpål at Pro Emergotech Ltd.., (*9)
This project is released under the MIT License., (*10)
Adds correlation ID to Guzzle requests.
MIT
laravel psr-7 log microservice lumen uuid dispatcher guzzle slim correlate