Build event-driven microservices with GCP and Laravel

Laravel Cloud Pub/Sub.

Why?

Build a scalable Laravel apps using event-driven microservices architecture (Pub/Sub), this tool adds the ability for your Laravel applications to communicate with each other using Google Cloud Pub/Sub.

Define your architecture.

First of all, you need to create subscriptions and topics in Google Cloud Platform, or you can use the cli.

Installation.

  • composer require gdg-tangier/cloud-pubsub

Configuration.

You can define multiple subscribers (queue connections) config in config/queue.php, the app can subscribe to multiple subscriptions.

Example.

'pubsub' => [  'driver' => 'pubsub',  'queue' => env('SUBSCRIPTION'),  'credentials' => [  'keyFilePath' => storage_path(env('PUBSUB_CLIENT_KEY')), // credentials file path '.json'  'projectId' => env('GCP_PROJECT_ID'),  ],  ],

Here where you can define your subscriptions jobs, events and topics mappings.

Example.

<?php  return [  /*  * GCP Credentials.  */  'credentials' => [  'keyFilePath' => storage_path(env('PUBSUB_CLIENT_KEY', 'client')),  'projectId' => env('GCP_PROJECT_ID'),  ],   /*  * Here where you map events name with Google Pub/Sub topics.  *  * Means, map each event name to specific Google Pub/Sub topic.  */  'events' => [  'event_name' => '__YOUR_TOPIC_NAME__',  ],   /*  * Here where you can tie the subscription classes (jobs) to topics.  *  * Means, map each subscription job to a specific Google pubsub topic.  * The subscription job is responsible for handling the incoming data  * from a Google Pub/Sub topic.  */  'subscriptions' => [  \App\PubSub\DummyJob::class => '__YOUR_TOPIC_NAME__',  ], ];

Create subscription class.

  • php artisan pubsub:make-subscriber <Name>

A subscription class will be created at app/Subscribers

Example.

<?php  namespace App\Subscribers;  use GDGTangier\PubSub\Subscriber\SubscriberJob; use GDGTangier\PubSub\Subscriber\Traits\JobHandler;  class UserUpdated {  use JobHandler;   /**  * @var mixed  */  public $payload;   /**  * @var \GDGTangier\PubSub\Subscriber\SubscriberJob  */  public $job;   /**  * UserUpdated constructor.  *  * @param \GDGTangier\PubSub\Subscriber\SubscriberJob $job  * @param $payload  */  public function __construct(SubscriberJob $job, $payload)  {  $this->job = $job;  $this->payload = $payload;  }   /**  * Execute the job.  *  * @return void  */  public function handle()  {  //   } }

Publishing data to the cloud.

use GDGTangier\PubSub\Publisher\Facades\PublisherFacade;  PublisherFacede::publish('MyData', 'event_name');
$publisher = app('gcloud.publisher.connection');  $publisher->publish('MyDaya', 'event_name');

php artisan pubsub:publish <message> <event>

Subscriptions worker.

  • php artisan pubsub:subscribe <connection>

Note: To keep the queue:subscribe process running permanently in the background, you should use a process monitor such as Supervisor to ensure that the queue worker does not stop running.

Testing.

You need to install GCP command line tool.

  1. Run the pubsub emulator./emulator.sh
  2. Export the pubsub emulator host export PUBSUB_EMULATOR_HOST=localhost:8085
  3. Run phpunit

via Laravel News Links
Build event-driven microservices with GCP and Laravel