JMS(三):MessageListener

消息监听器(Message Listener

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

 

MessageListener listener = new MessageListener( {
      public void onMessage(Message msg) {          //      }
});
topicSubscriber.setMessageListener(listener); //注册监听
topicConnection.start();

    有一点要注意,如果你先调用Connectionstart,然后再调用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();
				}
			}
		});
	}
}

// 这里是先启动然后在监听


你可能感兴趣的:(JMS(三):MessageListener)