Package Data | |
---|---|
Maintainer Username: | shakahl |
Maintainer Contact: | support@proemergotech.com (ProEmergotech Kft) |
Package Create Date: | 2017-06-16 |
Package Last Update: | 2017-06-20 |
Language: | PHP |
License: | MIT |
Last Refreshed: | 2024-11-15 15:03:25 |
Package Statistics | |
---|---|
Total Downloads: | 2,777 |
Monthly Downloads: | 0 |
Daily Downloads: | 0 |
Total Stars: | 1 |
Total Watchers: | 4 |
Total Forks: | 1 |
Total Open Issues: | 0 |
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.
composer require proemergotech/correlate-php-guzzle
This example assumes you are already using proemergotech/correlate-php-psr-7 middleware!
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.
This example assumes you are already using proemergotech/correlate-php-laravel middleware!
<?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.
// 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.
This example assumes you are already using proemergotech/correlate-php-laravel middleware!
// 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.
This package developed by Soma Szélpál at Pro Emergotech Ltd..
This project is released under the MIT License.