/*
* � 2001-2009, Progress Software Corporation and/or its subsidiaries or affiliates. All rights reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
Sample Application
Queue/PTP
Send and receive using multiple sessions and a temporary queue
This sample shows the round trip time for a message being sent to the broker
and received. A temporary queue is used to guarantee that each instance of this
sample receives its own messages only.
Usage:
java QueueRoundTrip -b <broker:port> -u <username> -p <password> -n <numTests> -h
Optional Parameters:
-b broker:port Broker name and port of your message server
Default: tcp://localhost:61616
-u username Default: user (username required)
-p password Default: password (not checked)
-n numTests The number of messages to be sent/received
Default: 100
-h Prints help screen.
*/
import org.apache.activemq.*;
public class QueueRoundTrip
{
private static final String DEFAULT_BROKER_NAME = "tcp://localhost:61616";
private static final String DEFAULT_PASSWORD = "password";
private static final String DEFAULT_USER_NAME = "user";
private static final int DEFAULT_NUM_TESTS = 100;
private static final int msgSize = 1400;
private static byte[] msgBody = new byte[msgSize];
private javax.jms.ConnectionFactory factory = null;
private javax.jms.Connection connection = null;
private javax.jms.Session sendSession = null;
private javax.jms.Session receiveSession = null;
private javax.jms.MessageProducer sender = null;
private javax.jms.MessageConsumer receiver = null;
private void QueueRoundTripper(String broker, String username, String password, int numTests){
try
{
//Set up two sessions, one for sending and the other for receiving
factory = new ActiveMQConnectionFactory(username, password, broker);
connection = factory.createConnection(username, password);
sendSession = connection.createSession(false, javax.jms.Session.AUTO_ACKNOWLEDGE);
receiveSession = connection.createSession(false, javax.jms.Session.AUTO_ACKNOWLEDGE);
}
catch (javax.jms.JMSException jmse)
{
System.err.println ("error: Cannot connect to broker- " + broker + ".\n");
jmse.printStackTrace ();
System.exit(1);
}
try
{
//Set up a temporary Queue:
javax.jms.TemporaryQueue tempQueue = sendSession.createTemporaryQueue();
receiver = receiveSession.createConsumer(tempQueue);
sender = sendSession.createProducer(tempQueue);
connection.start();
}
catch (javax.jms.JMSException jmse){
System.err.println("error: Connection couldn't be started.\n");
jmse.printStackTrace();
System.exit(1);
}
//Send messages using Temporary Queue:
try {
System.out.println("QueueRoundTrip application:");
System.out.println("===========================");
System.out.println("Sending Messages to Temporary Queue...");
//create a message to send
javax.jms.BytesMessage msg = sendSession.createBytesMessage();
msg.writeBytes(msgBody);
//send and receive the message the specified number of times:
long time = System.currentTimeMillis();
for (int i = 0; i < numTests; i++){
sender.send(msg);
msg = (javax.jms.BytesMessage)receiver.receive();
}
time = System.currentTimeMillis()-time;
System.out.println("\nTime for " + numTests + " sends and receives:\t\t" +
time + "ms\n" +
"Average Time per message:\t\t\t" + (float)time/(float)numTests + "ms\n");
System.out.println("\n\nPress Enter to close this window.");
java.io.BufferedReader stdin =
new java.io.BufferedReader( new java.io.InputStreamReader( System.in ) );
stdin.readLine();
System.exit(0);
}
catch (javax.jms.JMSException jmse) {
System.err.println("error: message not sent/received.\n");
jmse.printStackTrace();
System.exit(1);
}
catch (java.io.IOException ioe) {
ioe.printStackTrace();
}
}
/** Cleanup resources and then exit. */
private void exit()
{
try
{
connection.close();
}
catch (javax.jms.JMSException jmse)
{
jmse.printStackTrace();
}
System.exit(0);
}
public static void main (String argv[])
{
// Values to be read from parameters
String broker = DEFAULT_BROKER_NAME;
String username = DEFAULT_USER_NAME;
String password = DEFAULT_PASSWORD;
int numTests = DEFAULT_NUM_TESTS;
// Check parameters
if(argv.length > 0){
for (int i = 0; i < argv.length; i++) {
String arg = argv[i];
// Options
if (!arg.startsWith("-")) {
System.err.println ("error: unexpected argument - "+arg);
printUsage();
System.exit(1);
}
else {
if (arg.equals("-b")) {
if (i == argv.length - 1 || argv[i+1].startsWith("-")) {
System.err.println("error: missing broker name:port");
System.exit(1);
}
broker = argv[++i];
continue;
}
if (arg.equals("-u")) {
if (i == argv.length - 1 || argv[i+1].startsWith("-")) {
System.err.println("error: missing user name");
System.exit(1);
}
username = argv[++i];
continue;
}
if (arg.equals("-p")) {
if (i == argv.length - 1 || argv[i+1].startsWith("-")) {
System.err.println("error: missing password");
System.exit(1);
}
password = argv[++i];
continue;
}
if (arg.equals("-n")) {
if (i == argv.length - 1 || argv[i+1].startsWith("-")) {
System.err.println("error: missing number of test to run.");
System.exit(1);
}
numTests = (new Integer(argv[++i])).intValue();
continue;
}
if (arg.equals("-h")) {
printUsage();
System.exit(1);
}
}
}
}
// create the payload
byte charToWrite = (0x30);
for (int i = 0; i < msgSize; i++)
{
msgBody[i] = charToWrite;
charToWrite = (byte) ((int) charToWrite + (int) 0x01);
if (charToWrite == (0x39))
{
charToWrite = (0x30);
}
}
// Start the JMS client for the test.
QueueRoundTrip queueRoundTripper = new QueueRoundTrip();
queueRoundTripper.QueueRoundTripper(broker, username, password, numTests);
}
private static void printUsage()
{
StringBuffer use = new StringBuffer();
use.append("Usage:\n");
use.append("java QueueRoundTrip (options)...\n\n");
use.append("options:\n");
use.append("-b broker:port Broker name and port of your message server\n");
use.append(" Default: tcp://localhost:61616\n");
use.append("-u username Default: user (username required)\n");
use.append("-p password Default: password (not checked)\n");
use.append("-n numTests The number of messages to be sent/received\n");
use.append(" Default: 100\n");
use.append("-h This help screen");
System.err.println (use);
}
}