使用 Cloud Functions、Pub/Sub 和死信队列/主题时,我的方法是不是正确?
Posted
技术标签:
【中文标题】使用 Cloud Functions、Pub/Sub 和死信队列/主题时,我的方法是不是正确?【英文标题】:Is my approach right when using Cloud Functions, Pub/Sub and Dead-letter queues/topics?使用 Cloud Functions、Pub/Sub 和死信队列/主题时,我的方法是否正确? 【发布时间】:2021-12-28 12:35:42 【问题描述】:我正在开发我的第一个微服务,我选择将它部署在 Cloud Functions 服务中,并通过 Pub/Sub 完成消息传递。
Cloud Functions 服务由 Pub/Sub 主题中的事件(发布的消息)触发,微服务处理消息,到目前为止一切顺利。我知道 Cloud Functions 可以保证消息的确认和传递,这很好。
Cloud Functions 服务具有自动重试功能:如果我在代码中抛出异常,则会发生新的程序执行。为了避免在连续失败时循环执行,我引入了一个 if 条件来检查消息的“年龄”,并且由于我不想简单地丢弃消息,我将它发送/发布到另一个 Pub/Sub 主题我已经命名了“my-dead-letter-queue”主题。
由于我现在对所有事情都不确定,所以我问你:我的方法是否足够好?如果考虑 Cloud Functions 微服务和 Pub/Sub 消息传递,您会怎么做?
【问题讨论】:
【参考方案1】:是的,如果您想根据消息年龄规则在死信主题中发送错误消息,那么您的方法很好。
如果你想在失败次数上做(5次失败后,将消息放在死信主题中),你无法通过直接插入PubSub的云功能来实现。您需要创建一个 HTTP 函数,然后创建 PubSub 推送订阅,您可以在其上设置死信主题(在死信主题中自动发送消息之前,至少 5 分钟失败)。
第二种解决方案的优点是您无需处理消息并将其推送到 Cloud Functions 中的 pubsub(所有处理时间都需要花钱),它是自动的,因此您可以省钱 ;)
【讨论】:
谢谢。我最终在 Cloud Functions 上创建了一个基于 HTTP 的服务,然后我从 Pub/Sub PUSH 订阅中调用它的端点,就像你说的那样。【参考方案2】:每次遇到异常并将其插入死信主题时,您尝试使用的方法都很好。以后每次尝试实现异常处理时它都会正常工作,但如果您想在其中抛出更多异常,则应考虑更改管理异常的方式。
Here 您可以查看如何在 gcloud 命令行中发布消息
【讨论】:
以上是关于使用 Cloud Functions、Pub/Sub 和死信队列/主题时,我的方法是不是正确?的主要内容,如果未能解决你的问题,请参考以下文章
使用 Cloud Scheduler 触发 Cloud Functions 的 HTTP
Cloud Tasks + Cloud Functions - 重复执行
如何使用 Google Cloud SDK 列出所有 Cloud Functions?
如何从 Cloud Functions 连接 Google Cloud SQL?