我正在尝试将云函数 pubsub 订阅转发到死信主题,如下所述:https://cloud.google.com/pubsub/docs/dead-letter-topics#gcloud
我试过了
$ gcloud pubsub subscriptions update gcf-worker-topic --dead-letter-topic=gcf-worker-dead-letter-topic
还尝试在控制台中修改 gcf-worker-topic 订阅。两者都给了我同样的错误:
ERROR: (gcloud.pubsub.subscriptions.update) INVALID_ARGUMENT: The supplied AppEngine URL project does not match the subscription's parent project
目标是当云函数崩溃时将消息转发到死信队列。
我做错了什么?这是不支持的吗? future 有支持计划吗?
最佳答案
当您将云功能直接插入主题时,会使用奇怪的端点创建自动推送订阅:
https://d4d1290519676f29baf13a7bf18a25bf-dot-jea3ef1cff72566d8-tp.appspot.com/_ah/push-handlers/pubsub/projects/PROJECT_ID/topics/test-topic?pubsub_trigger=true
您可以看到此 URL 位于 appspot.com
中,这是 App Engine 的典型 URL。因此,直接插入 PubSub 的 Cloud Function 会生成一个奇怪的 Hack,该 Hack 在外部/google 项目中使用 AppEngine。您无法更新它。
解决方法是将您的 Cloud Function 更改为 HTTP 触发模式,并在其上创建 PubSub 推送订阅。但是,请小心,因为 PubSub 消息格式并不完全相同
- 使用推送订阅:
{
"message": {
"attributes": {
"key": "value"
},
"data": "SGVsbG8gQ2xvdWQgUHViL1N1YiEgSGVyZSBpcyBteSBtZXNzYWdlIQ==",
"messageId": "136969346945"
},
"subscription": "projects/myproject/subscriptions/mysubscription"
}
关于google-cloud-platform - PubSub 死字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62334198/