消息监听器(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(); } } }); }}// 这里是先启动然后在监听