首页 > 解决方案 > Google Cloud Storage 创建 pub sub 通知

问题描述

我正在尝试使用 PHP 创建一个发布/订阅通知。我有一个项目和一个服务帐户。我的代码如下所示:

use Google\Cloud\Core\Iam\PolicyBuilder;
use Google\Cloud\PubSub\PubSubClient;
use Google\Cloud\Storage\StorageClient;

self::$storage_client = new StorageClient(
                                    [
            'projectId' => "MY PROJECT ID",
            'keyFile'   => json_decode(file_get_contents("PATH TO MY KEYFILE", true)
                                    ]
                                 );

$pubSub = new PubSubClient(
   [ 'projectId' => "MY PROJECT ID"
);

$serviceAccountEmail = self::$storage_client->getServiceAccount();

$topicName = 'projects/MY PROJECT ID/topics/thumbnail-service-1';
$topic = $pubSub->topic( $topicName );

$iam = $topic->iam();

// --> Error happens here:
$updatedPolicy = (new PolicyBuilder( $iam->policy() ))
    ->addBinding('roles/pubsub.publisher', [ "serviceAccount:$serviceAccountEmail" ])
    ->result();

$iam->setPolicy( $updatedPolicy );

$notification = $bucket->createNotification( $topicName,
    ['event_types' => [
        'OBJECT_FINALIZE',
        'OBJECT_DELETE',
        ]
    ]
    );

我想我正在尝试创建名为的主题,但出现此错误:

exception 'Exception' with message 'exception 'Google\Cloud\Core\Exception\NotFoundException' with message '{
  "error": {
    "code": 404,
    "message": "Resource not found (resource=thumbnail-service-1).",
    "status": "NOT_FOUND"
  }
}

它不应该试图找到主题,我想创建它。我错过了什么?

标签: phpgoogle-cloud-storagegoogle-cloud-pubsub

解决方案


您提供的代码不是尝试创建 Pub/Sub 主题,而是尝试获取现有主题。如果要创建主题,则需要调用createTopic

use Google\Cloud\PubSub\PubSubClient;

$pubsub = new PubSubClient(['projectId' => $projectId]);
$topic = $pubsub->createTopic($topicName);

创建主题后,您应该可以createNotification使用主题名称进行调用。


推荐阅读