繁体   English   中英

Google PubSub:如何自定义向消费者分发消息?

[英]Google PubSub : How to customize distribution of messages to consumers?

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

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

2020 年 6 月更新过滤现在是 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 个主题,否则您可能会遇到配额

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM