package cern.cmw.mom.test; import cern.cmw.mom.pubsub.*; import cern.cmw.mom.util.TopicAdminHelper; /** * Message consumer test example. Usage : java Consumer msg_nr. * Subscribes to a predefined topic CMW.TEMP and prints statistics on throughput * every msg_nr messages received. * @see Producer */ public class Consumer implements SubscriptionListener { private final static String TOPIC = "CMW.TEMP.THROUGHPUT"; private Subscriber sub = null; private int number = 1; private int msgCounter = 1; private long prevTimestamp = 0; private long currTimestamp = 0; private long interval = 0; private float throughput = 0; /** * Constructor Consumer * * * @param n * */ public Consumer(int n) { try { number = n; sub = PubSubFactory.subscriber(); consume(); } catch (MOMException me) { me.printStackTrace(); } } /** * Method consume * */ private void consume() { try { sub.subscribe(TOPIC, this, null); System.out.println("Subscribed."); } catch (javax.jms.JMSException jmse) { jmse.printStackTrace(); } catch (javax.naming.NamingException ne) { ne.printStackTrace(); } } /** * Method onMessage * * * @param message * */ public void onMessage(javax.jms.Message message) { if ((msgCounter % number) == 0) { currTimestamp = System.currentTimeMillis(); interval = currTimestamp - prevTimestamp; if (interval != 0) { throughput = (((float) number) / ((float) interval)) * 1000; } else { throughput = 0; } System.out.println("Got message #" + msgCounter + " at " + currTimestamp + " msec (interval=" + interval + "msec throughput=" + throughput + "msg/sec)"); prevTimestamp = currTimestamp; } msgCounter++; } /** * Method printUsage * */ private static void printUsage() { System.err.println("usage: java Consumer <message nr>"); } /** * Method main * * * @param args * */ public static void main(String[] args) { // Is there anything to do? if (args.length != 1) { printUsage(); System.exit(1); } int number = Integer.parseInt(args[0]); //System.setProperty("cmw.mom.mbrokername","pcslux9"); //System.setProperty("cmw.mom.mbrokerport","2506"); //cmw.mom.pubsub.impl.Logger.LOG_ENABLED = true; Consumer consumer1 = new Consumer(number); } } /*--- Formatted in Sun Java Convention Style on Mon, Sep 24, '01 ---*/ /*------ Formatted by Jindent 3.23 Gold 1.02 --- http://www.jindent.de ------*/