How Can Setup Microservices-in-laravel

Microservice

Microservice is a collection of freely deployable services. It is an approach to building application software as a collection of independently deployable, compact, modular services. Herein, each service executes a different operation and interacts with one another via a simple, well-defined interface API.

Why do we need Microservice ?

The 3 prime reasons that modern enterprises need microservice architecture are:
● To defend against a failure of traffic or performance surge.
● To scale graciously
● To reduce the number of individuals engaging in each codebase.

How Can Setup Microservices ?

First project

Step-1 Install Project

Step-2 Go to In project

Step-3 composer require laravel/passport

—— composer require laravel/passport=~7.5.0 (For Laravel version 5.8)

Step-4
config/app.php in providers

Laravel\Passport\PassportServiceProvider::class,

Step-5
Set database from .env file
php artisan migrate

composer require lcobucci/jwt=3.3.3

==============================================

Step-6
First open “App\User”

replace from User extents –

in top – use Laravel\Passport\HasApiTokens;

use Illuminate\Notifications\Notifiable;

class User extends Authenticatable
{
use HasApiTokens, Notifiable;

}

Step-8
app/providers/AuthServiceProvider.php

In top – use Laravel\Passport\Passport;

in function boot()- Passport::routes();

Step-9
config/auth.php of api’drivers (Token will be replace)

‘driver’ => ‘passport’,

Step-10
Route/api.php

Route::get(‘/file_name’, ‘FileController@index’);

If Require then———————

install guzzle pakages-

    composer require guzzlehttp/guzzle~6.5.0 

If Require then————

app/Http/Kernel.php

‘client_credentials’ => \Laravel\Passport\Http\Middleware\CheckClientCredentials::class,

====================================================================================================================================

Second Project=====

Step-1 Install Project

Step-2 Go to In project

Step-3 composer require laravel/passport

—— composer require laravel/passport=~7.5.0 (For Laravel version 5.8)

Step-4
config/app.php in providers

Laravel\Passport\PassportServiceProvider::class,

Step-5
set database from .env file

php artisan migrate

composer require lcobucci/jwt=3.3.3

Step-6
php artisan passport:install

    and set client_credentials in first project
    --------------------------------------------

==============================================

Step-7
First open “App\User”

replace from User extents –

in top – use Laravel\Passport\HasApiTokens;

use Illuminate\Notifications\Notifiable;

class User extends Authenticatable
{
use HasApiTokens, Notifiable;

}

Step-8
app/providers/AuthServiceProvider.php

In top – use Laravel\Passport\Passport;

in function boot()- Passport::routes();

Step-9
config/auth.php of api’drivers (Token will be replace)

‘driver’ => ‘passport’,

Step-10
Route/api.php

Route::get(‘/file_name’,’FileController@index’);

If Require then———————

install guzzle pakages-

    composer require guzzlehttp/guzzle~6.5.0 

If Require then————

app/Http/Kernel.php

‘client_credentials’ => \Laravel\Passport\Http\Middleware\CheckClientCredentials::class,

==========================================================================================

when we create microservice we must do one thing,that env name app.php shold be same
for Example-

in env

ADD_STUDENT_DATA_URL=/api/add_studentDetails

in app.php

‘ADD_STUDENT_DATA_URL’ => env(‘ADD_STUDENT_DATA_URL’, ‘not found in .env file’),

===================================================================================================
==================================================================================================

In Client Microservice

============================================

Add Microservice Controller

class MicroserviceController extends Controller
{


private static function getCategoryAccessToken() {
    Log::info('In MicroserviceController ->getCategoryAccessToken()');
    try {
        Log::info('CRUD_M_BASE_URL:'. Config::get('app.CRUD_M_BASE_URL'));
        Log::info('CRUD_M_GRANT_TYPE: ' . Config::get('app.CRUD_M_GRANT_TYPE'));
        Log::info('CRUD_M_OAUTH_TOKEN_URL: ' . Config::get('app.CRUD_M_OAUTH_TOKEN_URL'));
        Log::info('CRUD_M_CLIENT_SECRET: ' . Config::get('app.CRUD_M_CLIENT_SECRET'));
        Log::info('Getting the token!');
        $http = new Client(); //GuzzleHttp\Client
        Log::info('after client the token!');
        Log::info('before  post client the token!');
        $response = $http->post(
            'http://ajaxwithjquery/crud_in_ajax/oauth/token',
            [
                'form_params' => [
                    'grant_type' => Config::get('app.CRUD_M_GRANT_TYPE'),
                    'client_id' => Config::get('app.CRUD_M_CLIENT_ID'),
                    'client_secret' => Config::get('app.CRUD_M_CLIENT_SECRET'),
                    'redirect_uri' => '',
                ],
            ]
        );
        Log::info('after  post client the token!');
        $array = $response->getBody()->getContents();
        $json = json_decode($array, true);
        $collection = collect($json);
        $access_token = $collection->get('access_token');
        Log::info('Got the token!');
        return $access_token;
    } catch (RequestException $e) {
        Log::info('There is some exception in MicroserviceController ->getCategoryAccessToken()');
        return $e->getResponse()->getStatusCode() . ': ' . $e->getMessage();
    }
}