您的位置:首页 > 其它

JMS(三):MessageListener

2016-03-02 00:00 330 查看
消息监听器(Message Listener)
消息监听器是一个充当消息的异步事件处理器的对象,它实现了MessageListener接口,这个接口只有一个方法onMessage,在这个方法里,你可以定义当接收到消息之后的要做的操作。你可以用setMessageListener方法为消息消费者注册一个监听器。

MessageListener listener = new MessageListener( {

public void onMessage(Message msg) {          //      }
});

topicSubscriber.setMessageListener(listener); //注册监听
topicConnection.start();

有一点要注意,如果你先调用Connection的start,然后再调用setMessageListener,消息很可能接收不到,正确的做法是先注册监听,再启动Connection。
注册监听之后,一旦JMS容器有消费投递过来,消息消费(接收)者就会自动调用监听器的onMessage方法。这个方法的带有一个参数Message,这就接收到的消息。

public class Test2 {

public static void main(String[] args) throws JMSException {

//建立与消息服务器的连接:
ConnectionFactory factory = new ActiveMQConnectionFactory("vm://localhost");
Connection connection = factory.createConnection();
connection.start();

//创建一个队列:
Queue queue = new ActiveMQQueue("testQueue");

//创建一个会话:
final Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
//创建一个生产者:
MessageProducer producer = session.createProducer(queue);

//通过会话创建一个消息:
for( int i =0;i<=2; i++ ){
Message message = session.createTextMessage("Hello JMS!");
//生产者把消息发送给服务器:
producer.send(message);
}

System.out.println( "消息已经成功发送到服务器。"  );

//创建一个消费者:
MessageConsumer consumer = session.createConsumer(queue);
consumer.setMessageListener( new MessageListener(){
@Override
public void onMessage(Message message) {
TextMessage text = (TextMessage) message;
try {
System.out.println( "内容: "+  text.getText() );
} catch (JMSException e) {
e.printStackTrace();
}
}
});
}
}

// 这里是先启动然后在监听
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: