PubSub Dead Lettering



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

目标是在云函数崩溃时将消息转发到死信队列。

我做错了什么? 这不受支持吗? 是否有未来支持计划?

当您将云函数直接插入主题时,会创建一个具有奇怪端点的自动推送订阅:

https://d4d1290519676f29baf13a7bf18a25bf-dot-jea3ef1cff72566d8-tp.appspot.com/_ah/push-handlers/pubsub/projects/PROJECT_ID/topics/test-topic?pubsub_trigger=true

您可以看到此网址是appspot.com,这是 App Engine 的典型特征。因此,直接插入 PubSub 的云函数生成了一个奇怪的 Hack,它在外部/谷歌项目中使用 AppEngine。您无法更新它。

解决方法是在HTTP触发模式下更改云函数,并在其上创建PubSub推送订阅。但是,请注意,因为 PubSub 消息格式并不完全相同

  • 使用推送订阅:
{
"message": {
"attributes": {
"key": "value"
},
"data": "SGVsbG8gQ2xvdWQgUHViL1N1YiEgSGVyZSBpcyBteSBtZXNzYWdlIQ==",
"messageId": "136969346945"
},
"subscription": "projects/myproject/subscriptions/mysubscription"
}
  • 直接链接到云功能:https://cloud.google.com/functions/docs/calling/pubsub#event_structure

您可能还需要--dead-letter-topic-project。见剂量。

我相信您正在更新topic id(gcf-worker-topic(而不是subscription id

dead-letter-topic是在订阅中定义的。尝试创建新订阅:

gcloud pubsub subscriptions create subscription-id 
--topic=gcf-worker-topic 
--dead-letter-topic=gcf-worker-dead-letter-topic 
--max-delivery-attempts=max-delivery-attempts 
[--dead-letter-topic-project=dead-letter-topic-project]

相关内容

  • 没有找到相关文章

最新更新