同步阻塞方式(receive)
订阅者或接收者抵用MessageConsumer的receive()方法来接收消息,receive方法在能接收到消息之前(或超时之前)将一直阻塞。
异步非阻塞方式(监听器onMessage())
订阅者或接收者通过MessageConsumer的setMessageListener(MessageListener listener)注册一个消息监听器,当消息到达之后,系统会自动调用监听器MessageListener的onMessage(Message message)方法。
订阅者或接收者调用MessageConsumer的receive方法来接受消息,receive方法在能够接收到这个消息之前,将一直阻塞。
while(true){
// 这里是 TextMessage 是因为消息发送者是 TextMessage , 接受处理的
// 也应该是这个类型的消息
//receive()方法 带参receive(4000L)超时4秒就会走
TextMessage message = (TextMessage)messageConsumer.receive();
if (null != message){
System.out.println("****消费者的消息:"+message.getText());
}else {
break;
}
}
//通过监听的方式来消费消息
//通过异步非阻塞的方式类消费消息
//通过messageConsumer的setMessageListener注册一个监听器
//当有消息发送来时,系统自动调用MessageListener的onMessage方法来处理消息
consumer.setMessageListener(new MessageListener() {
public void onMessage(Message message) {
if (message != null&&message instanceof TextMessage) {
TextMessage textMessage = (TextMessage)message;
try {
System.out.println("***消费者的消息:"+textMessage.getText());
} catch (JMSException e) {
e.printStackTrace();
}
}
}
});
//保证控制台不关闭,阻止程序关闭
System.in.read();
//关闭资源
consumer.close();
session.close();
connection.close();
原文:https://www.cnblogs.com/qiuwenli/p/13474969.html