送消息,然后打开JMS控制台,用 admin 命令启动管理平台,点击菜单Actions-Connections-online,出现界面如下:
可以看到JSM默认的队列queue1里已经有1条消息了,而其他的队列还是空着的。
下面我们来看看消息接收服务的代码:
package javayou.demo.openjms;
import java.util.*;
import javax.jms.*;
import javax.naming.*;
public class QueueReceiveSynchronous {
public static void main(String[] args) {
try {
//取得JNDI上下文和连接
Hashtable properties = new Hashtable();
properties.put(
Context.INITIAL_CONTEXT_FACTORY,
"org.exolab.jms.jndi.InitialContextFactory");
properties.put(Context.PROVIDER_URL,
"rmi://localhost:1099/");
Context context = new InitialContext(properties);
//获得JMS信息连接队列工厂
QueueConnectionFactory queueConnectionFactory =
(QueueConnectionFactory) context.lookup(
"JmsQueueConnectionFactory");
//获得JMS信息连接队列
QueueConnection queueConnection =
queueConnectionFactory.createQueueConnection();
//启动接收队列线程
queueConnection.start();
//产生队列Session,设置事务为false,自动应答消息接收
QueueSession queueSession =
queueConnection.createQueueSession(
false,
Session.AUTO_ACKNOWLEDGE);
//获得默认内建在JMS里的队列之一:queue1
Queue queue = (Queue) context.lookup("queue1");
//产生JMS队列接收器
QueueReceiver queueReceiver =
queueSession.createReceiver(queue);
//通过同步的方法接收消息
Message message = queueReceiver.receive();
String messageText = null;
if (message instanceof TextMessage)
messageText = ((TextMessage) message).
getText();
System.out.println(messageText);
//以下做清除工作,代码略
// ... ...
} catch (Exception e) {
e.printStackTrace();
}
}
}