Google发布/订阅-同一主题的多个订阅可通过REST API减少负载?

Dan*_*rte 1 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();
}
Run Code Online (Sandbox Code Playgroud)

清单2

如果在两个单独的JVM中运行清单2中的代码,则发送给该主题的每条消息都将传递给两个使用者中的一个。这使他们可以共享处理来自订阅的消息的工作。

http://www.oracle.com/technetwork/articles/java/jms2messaging-1954190.html

JMS 2.0规范描述了共享订阅的概念,其中一个主题上发布了多个订阅者/消费者共享(即负载平衡)消息。所有使用者都使用相同的订阅ID。

Dan*_*rte 5

我刚发现:

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

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