繁体   English   中英

PubSub 死字

[英]PubSub Dead Lettering

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

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

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

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

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 的典型。 因此,直接插入 PubSub 的 Cloud Function 生成了一个在外部/google 项目中使用 AppEngine 的奇怪 Hack。 你不能更新它。

解决方法是在 HTTP 触发模式下更改您的云 Function 并在其上创建 PubSub 推送订阅。 但是,要小心,因为 PubSub 消息格式并不完全相同

  • 通过推送订阅:
   {
     "message": {
       "attributes": {
         "key": "value"
       },
       "data": "SGVsbG8gQ2xvdWQgUHViL1N1YiEgSGVyZSBpcyBteSBtZXNzYWdlIQ==",
       "messageId": "136969346945"
     },
     "subscription": "projects/myproject/subscriptions/mysubscription"
   }

您可能还需要--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]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM