【发布时间】: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。
【问题讨论】:
标签: load-balancing google-cloud-pubsub