php - 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"
}
}
它不应该试图找到主题,我想创建它。我错过了什么?
解决方案
您提供的代码不是尝试创建 Pub/Sub 主题,而是尝试获取现有主题。如果要创建主题,则需要调用createTopic
:
use Google\Cloud\PubSub\PubSubClient;
$pubsub = new PubSubClient(['projectId' => $projectId]);
$topic = $pubsub->createTopic($topicName);
创建主题后,您应该可以createNotification
使用主题名称进行调用。
推荐阅读
- python - 使用 functools.lru_cache 时如何查看当前缓存大小?
- events - 对话流事件
- wcf - 使用 .Net Core 3.1 签署 Soap 1.1 主体
- docker - Github Actions - 创建一个快速运行的动作
- r - 如何用 HH:MM 表示十进制时间
- node.js - 如何从 crontab 在 docker 内运行 npm 命令?
- c++ - 我将如何修复这个 arduino 代码,以便 LED 从最后一个 LED 点亮?
- python - 如何使 Python linting 在 VSCode 中工作
- vba - MS-ACCESS 如何通过子程序或函数更改文本框字体颜色
- matlab - 如何在 PARFOR 循环中定期保存矩阵?