谷歌云平台中的 AWS Dead Letter Queue 相当于什么?

pro*_*mer 5 google-cloud-platform

谷歌云平台中的 AWS Dead Letter Queue 相当于什么?Google Cloud Platform 中如何管理失败的记录?

grz*_*hoo 7

从 2020 年开始,Google Pub/Sub 现在支持在创建订阅时配置死信主题(就像其他主要排队系统一样):

$ gcloud pubsub subscriptions create SUBSCRIPTION \
  --topic=TOPIC \
  --topic_project=TOPIC_PROJECT \
  --max-delivery-attempts=NUMBER_OF_RETRIES \
  --dead-letter-topic=DEAD_LETTER_TOPIC \
  --dead-letter-topic-project=DEAD_LETTER_TOPIC_PROJECT
Run Code Online (Sandbox Code Playgroud)

到达后NUMBER_OF_RETRIES,未能传递到的消息TOPIC将被发布到DEAD_LETTER_TOPIC(这对于进一步分析、触发警报或其他自动操作等很有用)

如文档中所述,与封闭订阅的父项目(即service-{project_number}@gcp-sa-pubsub.iam.gserviceaccount.com)关联的 Cloud Pub/Sub 服务帐户必须有权Publish()访问此主题和Acknowledge()此订阅上的消息。

文档:https : //cloud.google.com/sdk/gcloud/reference/pubsub/subscriptions/create#--max-delivery-attempts


nei*_*ldo 1

简短的回答:没有。Google PubSub 缺少其他所有排队系统的核心功能。

更长的答案:您可以尝试自己实现 DLQ,但是 Google Pub/Sub 缺少一些功能,因此很难正确实现。

  1. PubSub 不会跟踪消息已传递的次数,因此您可以在 X 次尝试失败后将其发送到 DLQ。因此,您必须在 Redis 等中创建自己的数据存储,以通过消息 ID 跟踪传递计数。
  2. PubSub 不支持重新传递的指数退避。如果您想要重新传递消息,则不要 ack 或 nack (这只会导致立即重新传递),而是不执行任何操作并让消息超时。
  3. 无法将消息配置为发送至 DLQ。因此,您必须创建第二个 PubSub 主题,然后使用客户端逻辑来确定是否/何时应将消息发送到 DLQ 主题。如果您需要重新处理 DLQ 中的消息,那么您必须将它们从 DLQ 主题中拉出,然后将它们推回到主主题中。请注意,这意味着它将被重新发送给每个订阅者!无法将消息重新传送到特定订阅。因此,每个订阅者都必须是幂等的,以避免重复处理消息。