Laravel使用GCP Pub/Sub做為queue driver

2021/01/24

套件

直接使用別人寫好的套件

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的時候

觸發自動建立造成權限不足的問題