【发布时间】:2009-08-28 17:00:57
【问题描述】:
我已经很多年没有接触过任何 J2EE 的东西了,我需要快速创建一个 JMS 客户端来进行演示。 我在 OS X 上使用 Eclipse,我什至无法开始,因为我似乎不知道如何获取所需的库。
这应该是一个简单的独立应用程序(不在容器中运行),它从主题中提取消息。
【问题讨论】:
-
重新标记,因为 Eclipse 与问题无关
标签: java jakarta-ee jms
我已经很多年没有接触过任何 J2EE 的东西了,我需要快速创建一个 JMS 客户端来进行演示。 我在 OS X 上使用 Eclipse,我什至无法开始,因为我似乎不知道如何获取所需的库。
这应该是一个简单的独立应用程序(不在容器中运行),它从主题中提取消息。
【问题讨论】:
标签: java jakarta-ee jms
每个 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();
}
注意持久订阅者的使用。这意味着我不必一直尝试维护单个连接并在以某种方式超时时处理错误。但是因为订阅是持久的,所以服务器知道在我没有连接时保留主题接收到的任何消息,并在下次连接时提供它们。无论主机操作系统如何,此代码都是相同的。唯一棘手的部分是提供者特定连接工厂的创建。
【讨论】: