package cern.cmw.mom.test; import cern.cmw.mom.pubsub.*; import cern.cmw.mom.util.TopicAdminHelper; /** * Multi threaded message consumer test example. Usage : java MultithreadedConsumer thread_nr message_nr. * */ public class MultithreadedConsumer { class ConsumerThread extends Thread implements SubscriptionListener { private long subscriptionToken = 0; private int identifier = 0; private int messageCounter = 0; /** * Constructor ConsumerThread * * @param id */ public ConsumerThread(int id) { super(); identifier = id; } /** * Method run * */ public void run() { try { subscriptionToken = subscriber.subscribe(TOPIC, this, null); System.out.println("Thread " + identifier + " 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) { try { System.out.println("Thread " + identifier + " got message " + (messageCounter++)); if ((messageCounter) == messageNumber) { System.out.println("Thread " + identifier + " time to close!"); subscriber.unSubscribe(subscriptionToken); } } catch (javax.jms.JMSException je) { System.out.println("JMSException raised while processing message: " + message); je.printStackTrace(); } } } private final static String TOPIC = "CMW.TEMP.THROUGHPUT"; private Subscriber subscriber = null; private int threadNumber = 1; private int messageNumber = 1; /** * Constructor Consumer * * * @param threads * @param number * */ public MultithreadedConsumer(int threads, int number) { threadNumber = threads; messageNumber = number; try { subscriber = PubSubFactory.subscriber(); consume(); } catch (MOMException me) { me.printStackTrace(); } } /** * Method consume * */ private void consume() { for (int i = 0; i < threadNumber; i++) { System.out.println("starting thread nr " + i); Thread consumer_thread = new ConsumerThread(i); consumer_thread.start(); } } /** * Method printUsage * */ private static void printUsage() { System.err.println("usage: java MultithreadedConsumer <threads nr> <message nr>"); } /** * Method main * * * @param args * */ public static void main(String[] args) { // Is there anything to do? if (args.length != 2) { printUsage(); System.exit(1); } int thread_number = Integer.parseInt(args[0]); int message_number = Integer.parseInt(args[1]); MultithreadedConsumer consumer = new MultithreadedConsumer(thread_number, message_number); } } /*--- Formatted in Sun Java Convention Style on Mon, Sep 24, '01 ---*/ /*------ Formatted by Jindent 3.23 Gold 1.02 --- http://www.jindent.de ------*/