我们使用由Pub/Sub触发的云功能来确保发送电子邮件.有时,电子邮件服务需要很长时间才能响应,我们的云功能会在收到错误之前终止.由于该消息已被确认,我们的电子邮件将丢失.
当我们被调用时,云功能似乎会自动发送一条确认发布/订阅消息的ACK.有没有办法延迟ACK直到成功完成我们的代码?或者,是否有一种方法可以捕获超时并重新发送消息以进行传递?我们可以尝试别的吗?
是否可以触发 HTTP 云功能以响应 pubsub 消息?
编辑订阅时,谷歌可以将消息推送到 HTTPS 端点,但出于滥用原因,必须能够证明您拥有该域才能执行此操作,当然您无法证明您拥有谷歌自己的*.cloudfunctions.net域,这是他们部署的地方。
我试图订阅的特定主题是一个公共主题,projects/pubsub-public-data/topics/taxirides-realtime. 答案可能是使用后台函数而不是 HTTP 触发,但由于不同的原因,这不起作用:
gcloud functions deploy echo --trigger-resource projects/pubsub-public-data/topics/taxirides-realtime --trigger-event google.pubsub.topic.publish
ERROR: gcloud crashed (ArgumentTypeError): Invalid value 'projects/pubsub-public-data/topics/taxirides-realtime': Topic must contain only Latin letters (lower- or upper-case), digits and the characters - + . _ ~ %. It must start with a letter and be from 3 to 255 characters long.
这似乎表明这仅适用于我拥有的主题,这是一个奇怪的限制。
是否可以在一个项目中设置pubsub主题/订阅者,该项目在同一个OR中的http PUSH到云功能在另一个Google项目中?我知道有PubSub触发器,但是当pubsub主题在另一个Google项目中时,这些触发器不起作用。奇怪的是,这是否甚至可以与订户PUSH一起使用。
错误如果我尝试创建pubsub错误,则会收到INVALID_ARGUMENT错误。我不确定这是否是因为我需要注册端点(https://cloud.google.com/pubsub/docs/push#other-endpoints)。但这感觉不对,因为当我创建一个函数时,URL是自动提供给我的,我可以通过Postman来访问它。
我确实找到了此链接(GCP-验证对PubSub推送的云函数https端点的所有权),并认为它与url验证有关..只想确认一下:)
有什么想法吗?我在某处错过了一些文档吗?
编辑:我认为它与URL验证以及使用../_ah/push-handlers/..路径有关。当我注册PubSub触发器时,该函数的传递类型仍然是PUSH,但它是具有更多路径的编码url:https://{hash}-dot-{hash}.appspot.com/_ah/push-handlers/pubsub/projects/{project-id}/topics/prototype-contact-created?pubsub_trigger=true