Notifications 带有发布/订阅和文档的Google云存储通知

Notifications 带有发布/订阅和文档的Google云存储通知,notifications,google-cloud-storage,google-cloud-pubsub,Notifications,Google Cloud Storage,Google Cloud Pubsub,在关于GCP存储和发布/订阅通知的文档中,我发现这句话并不十分清楚: Cloud Pub/Sub还向收件人提供至少一次传递[这很清楚], 这意味着您可以接收多条消息,其中包含多个 ID,表示相同的云存储事件[为什么?] 有人能更好地解释这种行为吗 谢谢 至少一次传递意味着服务必须收到收件人的确认,以确保收到邮件。在这种情况下,我们需要某种超时时间来重新发送消息。由于网络延迟或数据包丢失等原因,可能会让收件人发送确认,但发件人在超时之前不会收到确认,因此发件人将再次发送消息 这是网络通信和分布式系

在关于GCP存储和发布/订阅通知的文档中,我发现这句话并不十分清楚:

Cloud Pub/Sub还向收件人提供至少一次传递[这很清楚], 这意味着您可以接收多条消息,其中包含多个 ID,表示相同的云存储事件[为什么?]

有人能更好地解释这种行为吗

谢谢

至少一次传递意味着服务必须收到收件人的确认,以确保收到邮件。在这种情况下,我们需要某种超时时间来重新发送消息。由于网络延迟或数据包丢失等原因,可能会让收件人发送确认,但发件人在超时之前不会收到确认,因此发件人将再次发送消息

这是网络通信和分布式系统的一个常见问题,有不同类型的消息可以解决此问题。

至少一次传递意味着服务必须收到收件人的确认,以确保收到消息。在这种情况下,我们需要某种超时时间来重新发送消息。由于网络延迟或数据包丢失等原因,可能会让收件人发送确认,但发件人在超时之前不会收到确认,因此发件人将再次发送消息


这是网络通信和分布式系统的一个常见问题,有不同类型的消息来解决此问题。

谷歌云存储使用至少一次传递将通知传递到云发布/订阅。换句话说,对于发生的每个事件,GCS将至少向云发布/订阅一条消息

接下来,云发布/订阅将至少向最终用户您发送一次消息

因此,假设在某些罕见的情况下,GCS将关于同一事件的两条消息发布到云发布/订阅。现在,一个GCS事件有两个发布/订阅消息ID。下一步,更不可能的是,Pub/Sub会将这些消息发送两次。现在,您已收到4条消息,其中包含2个消息ID,与同一个GCS事件有关


该警告的重要意义在于,您不应尝试按发布/订阅消息ID重复删除GCS事件。

谷歌云存储至少使用一次传递将您的通知发送到云发布/订阅。换句话说,GCS将为发生的每个事件向云发布/订阅发布至少一条消息

接下来,云发布/订阅将至少向最终用户您发送一次消息

因此,假设在某些罕见的情况下,GCS将关于同一事件的两条消息发布到云发布/订阅。现在,一个GCS事件有两个发布/订阅消息ID。下一步,更不可能的是,Pub/Sub会将这些消息发送两次。现在,您已收到4条消息,其中包含2个消息ID,与同一个GCS事件有关

警告的重要内容是,您不应尝试按发布/订阅消息ID重复删除GCS事件。

回答“为什么”的问题 “至少一次”传递仅意味着消息将通过某种重试机制重试,直到成功传递(即确认)。因此,如果出现故障或超时,则需要重试

本质上(重试机制),这意味着您可能偶尔会有重复/多次交付。无论是PubSub还是GCS通知传递消息都是一样的

在您引用的场景中,您有:

  • 发布者(GCS通知)可以将GCS事件的副本发送到pubsub-topic
  • PubSub主题消息--可能包含来自publisher的重复消息
    • 消息传入时不进行重复数据消除
    • 分配唯一PubSub
      消息id
      的所有消息,即使它们是相同GCS事件通知的副本
  • PubSub-topic订阅--也可以向订阅者发送重复的消息

  • 使用PubSub

    消息发送给订户后,订户必须确认或删除该消息。消息一旦发送出去交付,在订户确认之前,即被视为未完成

    订阅者有一个可配置的、有限的时间或确认截止日期来确认消息。一旦截止日期过了,一条未完成的消息将无法确认

    云发布/订阅将重复尝试传递任何尚未确认或未完成的消息

    资料来源:

    使用谷歌云存储

    他们需要在内部做一些类似的事情,将通知事件从GCS“发布”到PubSub,所以原因基本相同


    为什么这很重要
    • 您需要预期来自GCS通知以及PubSub订阅的偶尔重复
    • PubSub消息id可用于检测PubSub主题->订阅服务器中的重复项
    • 您必须找出自己的幂等元id/令牌来处理来自“发布者”(GCS通知事件)的重复项
      • 生成、元生成等。。从另一个角度来看可能会有所帮助
    如果需要消除重复或实现一次处理,则可以使用幂等ID/令牌构建自己的解决方案,或者查看是否可以满足您的需要

    您可以使用云数据流实现对云发布/订阅消息流的一次处理。PubsubIO在自定义消息标识符或由云发布/订阅分配的标识符上消除重复消息。 资料来源:

    如果有兴趣从更根本上探讨我们为什么会看到:

    回答问题