【问题标题】:Google Cloud Storage create pub sub notificationGoogle Cloud Storage 创建 pub sub 通知
【发布时间】:2021-07-19 20:56:40
【问题描述】:

我正在尝试使用 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"
  }
}

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

【问题讨论】:

    标签: php google-cloud-storage google-cloud-pubsub


    【解决方案1】:

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

    use Google\Cloud\PubSub\PubSubClient;
    
    $pubsub = new PubSubClient(['projectId' => $projectId]);
    $topic = $pubsub->createTopic($topicName);
    

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

    【讨论】:

      【解决方案2】:

      您没有授权 PubSub 客户端:

      更改这部分代码:

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

      收件人:

      $pubSub = new PubSubClient(
         [ 'projectId' => "MY PROJECT ID",
         'keyFile'     => json_decode(file_get_contents("PATH TO MY KEYFILE", true) ]
      );
      

      您的代码缺少右数组括号]。我认为这是一个复制粘贴错字,因为在这种情况下 PHP 会打印一个错误。

      注意:我更喜欢使用KeyFilePath 而不是KeyFile。代码更容易阅读。

      $pubSub = new PubSubClient([
         'projectId'   => "MY PROJECT ID",
         'keyFilePath' => "/path/to/service-account.json"
      ]);
      

      接下来,验证主题名称是否确实存在。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-07-20
        • 2021-08-22
        • 2022-01-13
        • 2019-10-12
        • 2021-12-12
        • 2021-01-05
        • 2021-12-12
        • 1970-01-01
        相关资源
        最近更新 更多