jag/laravel-broadcaster-google-pubsub

在 Laravel Broadcaster 上使用 Google PubSub

v0.1.0 2020-05-05 12:13 UTC

This package is auto-updated.

Last update: 2024-09-06 11:41:47 UTC


README

Laravel Broadcaster 使用 Google PubSub

⚠️ 注意:目前处于开发中,可能没有通知就发生重大变化

要求

入门

安装 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');    
    }
}
Jay Are Galinada 创建和开发