【问题标题】: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 消息传递,您会怎么做?

【问题讨论】:

    标签: google-cloud-platform google-cloud-functions google-cloud-pubsub


    【解决方案1】:

    是的,如果您想根据消息年龄规则在死信主题中发送错误消息,那么您的方法很好。

    如果你想在失败次数上做(5次失败后,将消息放在死信主题中),你无法通过直接插入PubSub的云功能来实现。您需要创建一个 HTTP 函数,然后创建 PubSub 推送订阅,您可以在其上设置死信主题(在死信主题中自动发送消息之前,至少 5 分钟失败)。

    第二种解决方案的优点是您无需处理消息并将其推送到 Cloud Functions 中的 pubsub(所有处理时间都需要花钱),它是自动的,因此您可以省钱 ;)

    【讨论】:

    • 谢谢。我最终在 Cloud Functions 上创建了一个基于 HTTP 的服务,然后我从 Pub/Sub PUSH 订阅中调用它的端点,就像你说的那样。
    【解决方案2】:

    每次遇到异常并将其插入死信主题时,您尝试使用的方法都很好。以后每次尝试实现异常处理时它都会正常工作,但如果您想在其中抛出更多异常,则应考虑更改管理异常的方式。

    Here 您可以查看如何在 gcloud 命令行中发布消息

    【讨论】:

      猜你喜欢
      • 2020-08-31
      • 2020-04-08
      • 2019-07-26
      • 2021-10-16
      • 1970-01-01
      • 2016-12-16
      • 2017-10-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多