1 18 package org.apache.activemq.benchmark; 19 20 import javax.jms.DeliveryMode ; 21 import javax.jms.Destination ; 22 import javax.jms.JMSException ; 23 import javax.jms.Message ; 24 import javax.jms.MessageProducer ; 25 import javax.jms.Session ; 26 import java.io.BufferedReader ; 27 import java.io.File ; 28 import java.io.FileReader ; 29 import java.io.IOException ; 30 31 35 public class Producer extends BenchmarkSupport { 36 37 int loops = -1; 38 int loopSize = 1000; 39 private int messageSize = 1000; 40 41 public static void main(String [] args) { 42 Producer tool = new Producer(); 43 if (args.length > 0) { 44 tool.setUrl(args[0]); 45 } 46 if (args.length > 1) { 47 tool.setTopic(parseBoolean(args[1])); 48 } 49 if (args.length > 2) { 50 tool.setSubject(args[2]); 51 } 52 if (args.length > 3) { 53 tool.setDurable(parseBoolean(args[3])); 54 } 55 if (args.length > 4) { 56 tool.setMessageSize(Integer.parseInt(args[4])); 57 } 58 if (args.length > 5) { 59 tool.setConnectionCount(Integer.parseInt(args[5])); 60 } 61 try { 62 tool.run(); 63 } 64 catch (Exception e) { 65 System.out.println("Caught: " + e); 66 e.printStackTrace(); 67 } 68 } 69 70 public Producer() { 71 } 72 73 public void run() throws Exception { 74 start(); 75 publish(); 76 } 77 78 public int getMessageSize() { 81 return messageSize; 82 } 83 84 public void setMessageSize(int messageSize) { 85 this.messageSize = messageSize; 86 } 87 88 public int getLoopSize() { 89 return loopSize; 90 } 91 92 public void setLoopSize(int loopSize) { 93 this.loopSize = loopSize; 94 } 95 96 99 protected void publish() throws Exception { 100 final String text = getMessage(); 101 102 System.out.println("Publishing to: " + subjects.length + " subject(s)"); 103 104 for (int i = 0; i < subjects.length; i++) { 105 final String subject = subjects[i]; 106 Thread thread = new Thread () { 107 public void run() { 108 try { 109 publish(text, subject); 110 } 111 catch (JMSException e) { 112 System.out.println("Caught: " + e); 113 e.printStackTrace(); 114 } 115 } 116 }; 117 thread.start(); 118 } 119 120 } 121 122 protected String getMessage() { 123 StringBuffer buffer = new StringBuffer (); 124 for (int i = 0; i < messageSize; i++) { 125 char ch = 'X'; 126 buffer.append(ch); 127 } 128 return buffer.toString(); 129 } 130 131 protected void publish(String text, String subject) throws JMSException { 132 Session session = createSession(); 133 134 Destination destination = createDestination(session, subject); 135 136 MessageProducer publisher = session.createProducer(destination); 137 if (isDurable()) { 138 publisher.setDeliveryMode(DeliveryMode.PERSISTENT); 139 } 140 else { 141 publisher.setDeliveryMode(DeliveryMode.NON_PERSISTENT); 142 } 143 144 System.out.println("Starting publisher on : " + destination + " of type: " + destination.getClass().getName()); 145 System.out.println("Message length: " + text.length()); 146 147 if (loops <= 0) { 148 while (true) { 149 publishLoop(session, publisher, text); 150 } 151 } 152 else { 153 for (int i = 0; i < loops; i++) { 154 publishLoop(session, publisher, text); 155 } 156 } 157 } 158 159 protected void publishLoop(Session session, MessageProducer publisher, String text) throws JMSException { 160 for (int i = 0; i < loopSize; i++) { 161 Message message = session.createTextMessage(text); 162 163 publisher.send(message); 164 count(1); 165 } 166 } 167 168 protected String loadFile(String file) throws IOException { 169 System.out.println("Loading file: " + file); 170 171 StringBuffer buffer = new StringBuffer (); 172 BufferedReader in = new BufferedReader (new FileReader (file)); 173 while (true) { 174 String line = in.readLine(); 175 if (line == null) { 176 break; 177 } 178 buffer.append(line); 179 buffer.append(File.separator); 180 } 181 return buffer.toString(); 182 } 183 } 184 | Popular Tags |