google-cloud-platform - PubSub 死字

标签 google-cloud-platform google-cloud-functions google-cloud-pubsub dead-letter

我正在尝试将云函数 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/

相关文章:

mysql - 访问Google Cloud SQL中的mysql目录

google-cloud-platform - 间歇性(但频繁)Google Identity Toolkit 验证错误 : "Plaintext too large"

firebase - 从 firebase-functions-test 调用时,onDocumentCreated Firebase 函数中的数据和参数未定义

firebase - 如何使用管理员权限模拟 Firebase Cloud Function 的数据库身份验证?

具有云功能的 Firebase 托管 - 如何清除/刷新 CDN 缓存?

google-app-engine - 在当前项目和插件组 [org.apache.maven.plugins, org.codehaus.mojo] 中找不到前缀为 'gcloud' 的插件

node.js - 使用 REST API 的发布订阅 - 请求缺少有效的 API key

google-cloud-platform - 在Google Spanner中,是否有可能在已经观察到之后再次出现完全相同的提交时间戳

google-cloud-platform - 从 Python 访问 Google PubSub 中的 subscription/num_oustanding_messages 指标

java - 如何在本地开发环境中从 App Engine 访问 Google Cloud Storage?