消息監聽器(Message Listener)java
消息監聽器是一個充當消息的異步事件處理器的對象,它實現了MessageListener接口,這個接口只有一個方法onMessage,在這個方法裏,你能夠定義當接收到消息以後的要作的操做。你能夠用setMessageListener方法爲消息消費者註冊一個監聽器。服務器
MessageListener listener = new MessageListener( {
public void onMessage(Message msg) { // } });
topicSubscriber.setMessageListener(listener); //註冊監聽 topicConnection.start();
有一點要注意,若是你先調用Connection的start,而後再調用setMessageListener,消息極可能接收不到,正確的作法是先註冊監聽,再啓動Connection。session
註冊監聽以後,一旦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(); } } }); } } // 這裏是先啓動而後在監聽