测试我的jms监听器是否正常工作

时间:2013-06-25 19:51:32

标签: jms

我想测试我的jms监听器是否工作正常 当发送5条消息时(例如)我添加了一个计时器 “Threat.sleep(5000)”并且在5秒后我想将旧的messageID与新的messageID进行比较,这意味着我想知道是否收听了消息,如果ID改变意味着他们被成功地听了

这是我的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 个答案:

答案 0 :(得分: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...