andrew-svirin/lumen-microservices

Microservices Synchronous Requests in Lumen Laravel.

dev-develop 2020-07-28 11:08 UTC

This package is auto-updated.

Last update: 2020-07-28 11:08:39 UTC


README

Microservices Synchronous Requests in Laravel Lumen

Supported in Laravel 6.0+ and Laravel Lumen 6.0+

For configuration copy config/microsystem.php to project dir and setup micro-services inside file.

Installation for Lumen 6.0+

Register service provider in bootstrap/app.php

$app->register(\AndrewSvirin\Microsystem\MicrosystemServiceProvider::class);

Register settings file config/microsystem.php in bootstrap/app.php

$app->configure('microsystem');

Optional to use facades in bootstrap/app.php

$app->withFacades(true, [
    AndrewSvirin\Microsystem\Facades\Microsystem::class => 'Microsystem',
]);

Usage

For example, we need to interact with 2 remote micro-services where we need to get access-token for user. This example is in test file MicrosystemTest.php.

$accessToken = AndrewSvirin\Microsystem\Facades\Microsystem::
    call(\AndrewSvirin\Microsystem\Data\Requests\Demo1\Request1::create([
        'password' => 'password',
    ])) // Get password hash.
    ->next(\AndrewSvirin\Microsystem\Data\Requests\Demo2\Request1::create([
        'password_hash' => function (\AndrewSvirin\Microsystem\Services\ChainResponseCollection $responses) {
            return $responses->get(0)->getData()['password_hash'];
        },
        'email' => 'email',
    ])) // Get user login data using previous responses.
    ->next(\AndrewSvirin\Microsystem\Data\Requests\Demo1\Request2::create([
        'id' => function (\AndrewSvirin\Microsystem\Services\ChainResponseCollection $responses) {
            return $responses->get(1)->getData()['id'];
        },
        'name' => function (\AndrewSvirin\Microsystem\Services\ChainResponseCollection $responses) {
            return $responses->get(1)->getData()['name'];
        },
    ])) // Get user access token using previous responses.
    ->getData();

Possible to use Procedure for encapsulate chains logic see example AndrewSvirin\Microsystem\Tests\Data\Procedures\Procedure1.

Services configuration

return [

    /*
    |--------------------------------------------------------------------------
    | Microservices definitions.
    |--------------------------------------------------------------------------
    */
    'services' => [
        /*
        |--------------------------------------------------------------------------
        | Define Demo 1 microservice configuration.
        |--------------------------------------------------------------------------
        */
        'demo-1' => [
            'format' => 'json',
            'server' => [
                'scheme' => 'http',
                'host' => 'demo-1.loc',
                'port' => 80,
                'vhost' => '/api/',
            ],
            'client' => [
                'http_errors' => false,
                'decode_content' => false,
                'verify' => false,
                'cookies' => false,
            ],
        ],

        /*
        |--------------------------------------------------------------------------
        | Define Demo 2 microservice configuration.
        |--------------------------------------------------------------------------
        */
        'demo-2' => [
            'format' => 'json',
            'server' => [
                'scheme' => 'http',
                'host' => 'demo-2.loc',
                'port' => 8080,
                'vhost' => '/api/',
            ],
            'client' => [
                'http_errors' => false,
                'decode_content' => false,
                'verify' => false,
                'cookies' => false,
            ],
        ],
    ],
];

Statistic

Build Status