2013-06-25 27 views
0

我想測試我的jms監聽器是否工作正常 發送5條消息時(例如)我添加了一個計時器 「Threat.sleep(5000)」,5秒後我想將舊的messageID與新的messageID進行比較,這意味着我想知道這些消息是否被聆聽,所以如果ID改變,這意味着他們已經成功聆聽測試如果我的jms監聽器正在工作

這是我的OnMessage代碼...但它不適用於我:((

public class Consumer implements MessageListener{ 

public Consumer() { 
} 

//@Override 
public void onMessage(Message message) { 


    try { 

     TextMessage tm = (TextMessage) message; 

     int i; 
     TextMessage tm2 =tm; 
          for(i=0;i<1;i++) 
          { 

     try { 
      Thread.sleep(5000); 

      if (!tm.getJMSMessageID().equals(tm2.getJMSMessageID())) 
      { 
       System.out.println("\t----Listener not working----"); 
      } 
      else { 

      System.out.println("Message reçu:"); 
      System.out.println("\tTemps:  " + System.currentTimeMillis() + " ms"); 
      System.out.println("\tMessage ID: " + tm.getJMSMessageID()); 
      System.out.println("\tCorrel. ID: " + tm.getJMSCorrelationID()); 
      System.out.println("\tConsumed message: " + tm.getText()); 
          System.out.println("\t----Listener working----"); 
      } 
      //fin else 
     } 
     catch (InterruptedException ex) { 
      Logger.getLogger(Consumer.class.getName()).log(Level.SEVERE, null, ex); 
     } 
          } 

    } 
    catch (JMSException jex) { 
     System.out.println("Exception: " + jex); 
    } 
} 

}

回答

1

所以你檢查JMS消息ID以確保沒有兩個消息具有相同的ID?這可能是矯枉過正,因爲如果你的監聽器接收消息,它的工作!......不過,你的做法有幾個問題....

TextMessage tm = (TextMessage) message; 
    ...  
    TextMessage tm2 =tm; 
    Thread.sleep(5000); 
    if (!tm.getJMSMessageID().equals(tm2.getJMSMessageID())) 

以上if()將永遠是假的,因爲你比較同樣的信息;另外,sleep()聲明沒用。

如果您想比較消息ID以確保它們始終是唯一的,但是如果代理未能發送消息,則同一消息將被重新發送並且id會相同,但無論如何,您都可以使用此消息替代您的代碼..

private static ConcurrentHashMap<String,String> mesgIdMap = 
    new ConcurrentHashMap<String, String>(); 

public Consumer() { 
} 

//@Override 
public void onMessage(Message message) { 
    try { 
     TextMessage tm = (TextMessage) message; 

     if(mesgIdMap.contains(tm.getJMSMessageID())) 
      System.out.println("\tProcessing JMS message with same ID again!"); 

     //add the message id to the map 
     mesgIdMap.put(tm.getJMSMessageID(),tm.getJMSMessageID()); 
     //print statements here...