//创建Topic的会话,用于接收信息
topicSession =
topicConnection.createTopicSession(false,
Session.AUTO_ACKNOWLEDGE);
topic = (Topic) context.lookup("topic1");
//创建Topic subscriber
topicSubscriber = topicSession.createSubscriber(topic);
//设置订阅监听
topicSubscriber.setMessageListener(this);
//启动信息接收
topicConnection.start();
} catch (NamingException e) {
e.printStackTrace();
} catch (JMSException e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
System.out.println("非同步定购消息的接收:");
try {
TopicSubscribeAsynchronous listener =
new TopicSubscribeAsynchronous();
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
//收到订阅信息后自动调用此方法
public void onMessage(Message message) {
try {
String messageText = null;
if (message instanceof TextMessage)
messageText = ((TextMessage) message).getText();
System.out.println(messageText);
} catch (JMSException e) {
e.printStackTrace();
}
}
}
编译好后,启动openJms服务,打开admin管理台,为了运行方便,这里先列出三个类的运行命令:
java -cp .\; -Djava.ext.dirs=.\lib; javayou.demo.openjms.TopicPublish
java -cp .\; -Djava.ext.dirs=.\lib; javayou.demo.openjms.TopicSubscribeSynchronous
java -cp .\; -Djava.ext.dirs=.\lib; javayou.demo.openjms.TopicSubscribeAsynchronous
先运行2个接收命令,再运行发布命令,可以看到控制台的Topic有消息接收,并且接收1和2都有消息接收的提示,到此完成演示,由于是非持久订阅,所以可以看到控制台上的Topic消息条数不会减少。