gdg-tangier / cloud-pubsub
Google Cloud pub-sub for laravel
Installs: 36 554
Dependents: 0
Suggesters: 0
Security: 0
Stars: 48
Watchers: 5
Forks: 6
Open Issues: 0
Requires
- google/cloud-pubsub: ^1.16
Requires (Dev)
- orchestra/testbench: ^3.8
This package is not auto-updated.
Last update: 2024-11-13 21:37:50 UTC
README
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.
config/queue.php
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'), ], ],
config/pubsub.php
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.
- Using facade.
use GDGTangier\PubSub\Publisher\Facades\PublisherFacade; PublisherFacade::publish('MyData', 'event_name');
- Using service container.
$publisher = app('gcloud.publisher.connection'); $publisher->publish('MyData', 'event_name');
- Using artisan command.
php artisan pubsub:publish <message> <event>
Subscriptions worker.
php artisan pubsub:subscribe <connection>
Or alternatively you can run php artisan queue:work <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.
Using GCP Pub/Sub emulator.
You need to install GCP command line tool and Setup Topics/Subscriptions
To use the emulator:
-
Go to the
AppServiceProvider@register
and addPubSub::useEmulatorCredentials()
-
Export the pubsub emulator host
export PUBSUB_EMULATOR_HOST=localhost:8085
-
Run the emulator,
php artisan pubsub:emulator
Testing.
You need to install GCP command line tool.
- Run the pubsub emulator
./emulator.sh
- Export the pubsub emulator host
export PUBSUB_EMULATOR_HOST=localhost:8085
- Run
phpunit