Google Pub / Sub - 对同一主题进行多次订阅以通过REST API减少负载?

时间:2017-03-01 18:26:16

标签: load-balancing google-cloud-pubsub

一个主题会有一个发布者。我们说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规范描述了共享订阅的概念,其中在主题上发布了多个订阅者/消费者共享(a.k.a负载平衡)消息。所有消费者都使用相同的订阅ID。

1 个答案:

答案 0 :(得分:5)

我刚刚发现了这个:

负载平衡多个订阅者可以对同一个“共享”订阅进行拉取调用。每个订户将接收消息的子集。推送端点可以是负载平衡器。

来自https://cloud.google.com/pubsub/docs/subscriber