Laravel使用GCP Pub/Sub做為queue driver
套件
直接使用別人寫好的套件
https://github.com/kainxspirits/laravel-pubsub-queue
新增queue driver
依照設定調整laravel的config/queue.php
'pubsub' => [
'driver' => 'pubsub',
'queue' => env('PUBSUB_QUEUE', 'default'),
'project_id' => env('PUBSUB_PROJECT_ID', 'your-project-id'),
'retries' => 3,
'request_timeout' => 60,
'subscriber' => 'subscriber-name',
],
queue
這個是laravel queue worker執行的name
也是GCP pub/sub的topic name
例如設定的值為demo-queue
那這個套件就會自動在GCP pub/sub建立一個叫demo-queue的topic
然後執行queue worker的時候
queue的名稱也是一樣要使用demo-queue
php artisan queue:work --queue=demo-queue
project-id
就GCP的project id
subscriber
其實就是GCP pub/sub的subscription name
一樣如果沒先建立subscription的話
這個套件也會自動建立subscription
其他注意事項
Authentication
這個套件作者有提到他是Google API的PHP SDK做的
所以認證方式要參考Google API的PHP SDK作法
Laravel的話直接使用這個環境變數的設定方式最方便
因為laravel啟動後就會直接把.env檔案都設定到環境變數中
最主要就是GOOGLE_APPLICATION_CREDENTIALS設定為service account的金鑰路徑
然後這個service account在GCP的IAM設定中賦予足夠的權限即可
Service account權限
因為前面有提到
如果pub/sub的topic或subscription不存在的話
這個套件會自動建立
所以這個service account必須要給予建立topic及subscription的權限
或是在使用之前
先人工預建好topic及subscription
才不會發生啟動queue worker的時候
觸發自動建立造成權限不足的問題