Каждая реализация JMS имеет свой собственный набор библиотек, которые определяют, как вы получаете исходную фабрику соединений. Если у вас есть существующий сервер, с которого нужно извлекать сообщения, вам нужно изучить документацию этого сервера, чтобы определить, где найти библиотеки для размещения в вашем classpath и как создать исходную фабрику соединений. Если вы хотите создать сервер для демонстрации, я рекомендую использовать встроенный Active MQ брокер.
Если у вас есть фабрика соединений, опрос сообщений из какой-либо темы довольно прост. Вот пример кода, который можно вызвать, чтобы истощить тему его текущих сообщений.
// Implementation specific code
public void drainTopic(TopicConnectionFactory factory, String topicName, String subscriberId)
// set factory properties like the server ID
Connection conn = factory.createConnection();
conn.start();
Session session = conn.createSession(false, Session.AUTO_ACKNOWLEDGE);
Topic topic = session.createTopic(topicName);
MessageConsumer consumer = session.createDurableSubscriber(topic, subscriberId);
Message message;
while (null != (message = consumer.receive(1000))) {
// do work on the message
}
conn.close();
}
Обратите внимание на использование надежного абонента. Это означает, что мне не нужно постоянно поддерживать одно соединение и обрабатывать ошибки, если они как-то истекают. Но поскольку подписка является надежной, сервер знает, как сохранить все сообщения, которые получает тема, пока я не подключен, и предоставить их при следующем подключении. Этот код будет одинаковым независимо от операционной системы хоста. Единственная сложность - создание фабрики соединений для конкретного провайдера.