Google Pub/Sub - 多个订阅同一主题以通过 REST API 减少负载?
Posted
技术标签:
【中文标题】Google Pub/Sub - 多个订阅同一主题以通过 REST API 减少负载?【英文标题】:Google Pub/Sub - Multiple subscriptions to same topic to reduce load via REST API? 【发布时间】:2017-07-21 05:22:42 【问题描述】:一个主题会有一个发布者。假设每秒 1000 条消息。
我可以通过让多个端点接收消息来平衡这些负载吗?
这就是我想做的: (Google Pub/Sub 的 REST API 是否允许这样做?)
JMS 2.0 提供了一个解决方案。您可以使用新方法创建“共享”非持久订阅:createSharedConsumer。此方法在 Session(用于使用经典 API 的应用程序)和 JMSContext(用于使用简化 API 的应用程序)上都可用。由于两个 JVM 需要能够识别它们需要共享的订阅,因此它们需要提供一个名称来识别共享订阅,如清单 2 所示。
private void createSharedConsumer(ConnectionFactory connectionFactory, Topic topic) throws JMSException
Connection connection = connectionFactory.createConnection();
Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
MessageConsumer messageConsumer = session.createSharedConsumer(topic,"mySubscription");
connection.start();
Message message = messageConsumer.receive(10000);
while (message != null)
System.out.println("Message received: " + ((TextMessage) message).getText());
message = messageConsumer.receive(10000);
connection.close();
清单 2
如果您在两个单独的 JVM 中运行清单 2 中的代码,则发送到主题的每条消息都将传递给两个消费者中的一个或另一个。这允许他们共享处理来自订阅的消息的工作。
http://www.oracle.com/technetwork/articles/java/jms2messaging-1954190.html
JMS 2.0 规范描述了共享订阅的概念,其中多个订阅者/消费者共享(也称为负载平衡)在一个主题上发布的消息。所有消费者使用相同的订阅 ID。
【问题讨论】:
【参考方案1】:我刚刚发现了这个:
负载平衡多个订阅者可以对同一个“共享”订阅进行拉取调用。每个订阅者都会收到消息的一个子集。推送端点可以是负载均衡器。
来自https://cloud.google.com/pubsub/docs/subscriber
【讨论】:
以上是关于Google Pub/Sub - 多个订阅同一主题以通过 REST API 减少负载?的主要内容,如果未能解决你的问题,请参考以下文章
Google Pub/Sub + Cloud Run 生成多个容器
如何使用当前的 pubsub 订阅者从 google Pub/Sub 系统获取消息