多年来我没有触及任何J2EE的东西,我需要为一个演示启动一个快速的JMS客户端。 我在OS X上使用Eclipse,我甚至无法开始,因为我似乎无法弄清楚如何获得所需的库。
这应该是一个简单的独立应用程序(不在容器中运行)从主题中提取消息。
答案 0 :(得分:2)
每个JMS实现都有自己的一组库,这些库指定了如何获得初始连接工厂。如果您有一个可从中提取消息的现有服务器,则需要检查该服务器的文档以确定在类路径中找到要放置的库的位置以及如何创建初始连接工厂。如果您想为演示目的创建服务器,我建议使用嵌入式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();
}
请注意使用持久订阅者。这意味着我不必一直尝试维护单个连接,并且如果它以某种方式超时则处理错误。但由于订阅是持久的,服务器知道在我没有连接时保留主题收到的任何消息,并在我的下一次连接时提供它们。无论主机操作系统如何,此代码都是相同的。唯一棘手的部分是创建提供者特定的连接工厂。