jag / laravel-broadcaster-google-pubsub
在 Laravel Broadcaster 上使用 Google PubSub
Requires
- php: ^7.1
- ext-json: *
- google/cloud-pubsub: ^1.24
- illuminate/broadcasting: ^7.0
- illuminate/config: ^7.0
- illuminate/contracts: ^7.0
- illuminate/log: ^7.0
- illuminate/support: ^7.0
- jag/laravel-contracts-google-pubsub: ^0.1.3
- jag/laravel-exceptions-google-pubsub: ^0.1.2
Requires (Dev)
- orchestra/testbench: ^5.2
- phpunit/phpunit: ^9
This package is auto-updated.
Last update: 2024-09-06 11:41:47 UTC
README
Laravel Broadcaster 使用 Google PubSub
⚠️ 注意:目前处于开发中,可能没有通知就发生重大变化
要求
- PHP
^7.1
- Laravel/Lumen
^7.0
(支持旧版本?:问题#1) - gRPC(可选但可提高性能)
入门
安装 Composer
composer require jag/laravel-broadcaster-google-pubsub
添加服务提供者
从 Laravel 5.5 开始,默认启用自动发现,但如果您禁用或使用Lumen 框架,则需要添加服务提供者
在 config/app.php
中
... 'providers' => [ ... Jag\Broadcaster\GooglePubSub\Providers\LaravelPubSubServiceProvider::class, ] ...
如果是 Lumen,则在其 bootstrap/app.php
中
... $app->register(Jag\Broadcaster\GooglePubSub\Providers\LaravelPubSubServiceProvider::class); ...
配置
在 Laravel & Lumen 中
确保您的 BROADCAST_DRIVER
设置为 google
在您的 .env
文件中
...
BROADCAST_DRIVER=google
GOOGLE_PUBSUB_BROADCASTER_PROJECT_ID=insert-your-google-project-id-here
GOOGLE_PUBSUB_BROADCASTER_CREDENTIALS=path/to/your/key.json
在 Lumen 中
如果您使用 Lumen,则需要将通常位于 vendor/laravel/lumen-framework/config/broadcasting.php
的广播配置复制到您的 config/broadcasting.php
,然后添加以下配置
return [ 'default' => env('BROADCAST_DRIVER', 'null'), 'connections' => [ // Usually other connections here like pusher, redis, log & null by default 'google' => [ 'driver' => 'google', 'project_id' => env('GOOGLE_PUBSUB_BROADCASTER_PROJECT_ID', env('GOOGLE_PROJECT_ID', env('GCLOUD_PROJECT'))), 'credentials_path' => env('GOOGLE_PUBSUB_BROADCASTER_CREDENTIALS', env('GOOGLE_APPLICATION_CREDENTIALS')), 'auto_create_topic' => env('GOOGLE_PUBSUB_BROADCASTER_AUTO_CREATE_TOPIC', false), 'override_config' => [], ] ], ];
您也可以在这些配置中找到 vendor/jag/laravel-broadcaster-google-pubsub/config/google.php
如果
GOOGLE_PUBSUB_BROADCASTER_CREDENTIALS
为空或不存在,则将自动搜索storage/key.json
。
如果您在
.env
中添加类似GOOGLE_PUBSUB_BROADCASTER_CREDENTIALS=storage/google-key.json
的内容,它将搜索storage/google-key.json
,这是Str::startsWith
的一个神奇用法 文档。
您可以在
auto_create_topic
中启用自动创建主题(布尔类型,默认为 false),但请确保您的凭证具有Pub/Sub Viewer
的权限。
您还可以在
override_config
中覆盖大多数与 PubSubClient 相关的配置,但 除外projectId
。
// broadcasting.php return [ ... 'connections' => [ 'google' => [ ...// Default configuration 'override_config' => [ 'retries' => 5, 'requestTimeout' => 120, ], ] ], ];
用法
要在事件中使用这些,请确保实现 Illuminate\Contracts\Broadcasting\ShouldBroadcast
并在 broadcastOn()
中添加主题。
// App\Events\NewlyCreatedProductEvent.php ... class NewlyCreatedProductEvent implements ShouldBroadcast { ... public function broadcastOn() { return [ 'text-based-topic-name', new ProductChannel() ]; } }
在您的频道上,主题名称将基于频道名称
// App\Broadcasting\ProductChannel ... class ProductChanel extends Channel { public function __construct() { parent::__construct('product-topic'); } }
但您也可以通过 $topic
公共属性来覆盖它。
// App\Broadcasting\ProductChannel ... class ProductChanel extends Channel { // or the fully name topic eg. projects/project-id/topics/topic-id public $topic = 'override-topic-name'; public function __construct() { parent::__construct('product-topic'); } }