【问题标题】:Google PubSub : How to customize distribution of messages to consumers?Google PubSub:如何自定义向消费者分发消息?
【发布时间】:2017-03-16 12:00:15
【问题描述】:

我有一个场景,我们会将客户数据发送到 pubsub 并与 java 订阅者一起使用。我有多个订阅者订阅了同一个订阅。有没有办法将相同 customerID 的所有消息路由到同一个订阅者?

我知道 Google Dataflow 具有基于会话的窗口。但是,我想知道我们是否可以使用简单的 java 消费者来实现它。

【问题讨论】:

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


    【解决方案1】:

    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

    【讨论】:

    • 谢谢卡马尔!!
    • @rhg 你应该接受这个作为正确答案。 :)
    • @Kamal 在这个答案一年半之后,对特定订阅者的消息过滤的支持是否改变了?即现在是否支持?
    • @thefolenangel Cloud Pub/Sub 中的消息过滤还没有变化,没有。
    • @thefolenangel 过滤现在在 Cloud Pub/Sub 中可用。我已经用一些关于它的细节更新了我的答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-08
    • 2013-08-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多