使用 Cloud Functions Pub/Sub 和 Dead-letter queues/topics 时,我的方法是否正确?

Is my approach right when using Cloud Functions, Pub/Sub and Dead-letter queues/topics?

我正在开发我的第一个微服务,我选择将它部署在 Cloud Functions 服务中,并通过 Pub/Sub 完成消息传递。

Cloud Functions 服务由 Pub/Sub 主题中的事件(发布的消息)触发,微服务处理消息,到目前为止一切顺利。我知道 Cloud Functions 保证消息的确认和传递,这很好。

Cloud Functions 服务有自动重试功能:如果我在代码中抛出异常,就会重新执行程序。为了避免在连续失败时循环执行,我引入了一个 if 条件来检查消息的 'age',并且由于我不想简单地丢弃该消息,我 send/publish 它到另一个 Pub/Sub 我命名为“my-dead-letter-queue”主题的主题。

由于我现在什么都不确定,我问你:我的方法够好吗?如果不考虑 Cloud Functions 微服务和 Pub/Sub 消息传递,您会怎么做?

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

如果想按失败次数来做(5次失败后,把消息放到死信主题),直接在PubSub上插一个云函数是做不到的。您需要创建一个 HTTP 函数,然后创建 PubSub 推送订阅,您可以在该订阅上设置死信主题(在死信主题中自动发送消息前 5 分钟失败)。

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

每次遇到异常并将其插入死信主题时,您尝试使用的方法都很好。每次你尝试实现异常处理时它都会起作用,以后不会有任何问题,但如果你想在那里抛出更多异常,你应该考虑改变你管理异常的方式。

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