2020 年 6 月更新:Filtering 现在是 Google Cloud Pub/Sub 中的一项可用功能。创建订阅时,可以指定一个查看消息属性的过滤器。如果消息与过滤器不匹配,Pub/Sub 服务会自动确认消息而不将其传递给订阅者。
在这种情况下,您需要有不同的订阅,并且每个订阅者都会使用来自其中一个订阅的消息。每个订阅都会设置一个过滤器来匹配客户 ID。如果您知道客户 ID 列表并且它很短,您可以为每个客户 ID 设置一个完全匹配过滤器,例如,
attribute.customerID = "customerID1"
如果您有很多客户 ID,并且想要对每个订阅者收到的 ID 集进行分区,您可以使用前缀运算符来执行此操作。例如,如果 ID 是数字,您可以使用以下过滤器:
hasPrefix(attribute.customerID, "0")
hasPrefix(attribute.customerID, "1")
hasPrefix(attribute.customerID, "2")
hasPrefix(attribute.customerID, "3")
...
hasPrefix(attribute.customerID, "9")
上一个答案:
目前,Google Cloud Pub/Sub 无法过滤传递给特定订阅者的消息,没有。不过,如果您先验地知道您拥有的订阅者数量,您可以自己计算。您可以创建与订阅者一样多的主题,然后将客户 ID 存储到不同的主题中,将消息发布到每个客户 ID 的正确主题。您将在每个主题上创建一个订阅,并且每个订阅者将从这些订阅之一接收消息。
缺点是,如果您有任何订阅者想要所有客户 ID 的数据,那么您必须对每个主题进行额外订阅,并且该订阅者必须从所有这些订阅中获取消息。
请记住,您不会希望创建超过 10,000 个主题,否则您可能会遇到 quotas。