// Copyright (c) 2007-Present Pivotal Software, Inc. All rights reserved. // // This software, the RabbitMQ Java client library, is triple-licensed under the // Mozilla Public License 1.1 ("MPL"), the GNU General Public License version 2 // ("GPL") and the Apache License version 2 ("ASL"). For the MPL, please see // LICENSE-MPL-RabbitMQ. For the GPL, please see LICENSE-GPL2. For the ASL, // please see LICENSE-APACHE2. // // This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, // either express or implied. See the LICENSE file for specific language governing // rights and limitations of this software. // // If you have any questions regarding licensing, please contact us at // info@rabbitmq.com. package com.rabbitmq.client.test.performance; import com.rabbitmq.client.AMQP; import com.rabbitmq.client.Channel; import com.rabbitmq.client.Connection; import com.rabbitmq.client.ConnectionFactory; import com.rabbitmq.client.MessageProperties; import org.apache.commons.cli.CommandLine; import org.apache.commons.cli.Option; import java.io.IOException; import java.util.concurrent.TimeoutException; public class StressManagement { protected static class Parameters { final String host; final int port; final int queueCount; final int channelCount; public static CommandLine parseCommandLine(String[] args) { CLIHelper helper = CLIHelper.defaultHelper(); helper.addOption(new Option("q", "queues", true, "number of queues")); helper.addOption(new Option("c", "channels", true, "number of channels")); return helper.parseCommandLine(args); } public Parameters(CommandLine cmd) { host = cmd.getOptionValue("h", "localhost"); port = CLIHelper.getOptionValue(cmd, "p", AMQP.PROTOCOL.PORT); queueCount = CLIHelper.getOptionValue(cmd, "q", 5000); channelCount = CLIHelper.getOptionValue(cmd, "c", 100); } public String toString() { StringBuilder b = new StringBuilder(); b.append("host=" + host); b.append(",port=" + port); b.append(",queues=" + queueCount); b.append(",channels=" + channelCount); return b.toString(); } } protected final Parameters params; protected final ConnectionFactory connectionFactory = new ConnectionFactory(); protected Connection connection; protected Channel publishChannel; protected Channel[] channels; public StressManagement(Parameters p) { params = p; } public long run() throws IOException, TimeoutException { connectionFactory.setHost(params.host); connectionFactory.setPort(params.port); connection = connectionFactory.newConnection(); publishChannel = connection.createChannel(); System.out.println("Declaring..."); channels = new Channel[params.channelCount]; for (int i = 0; i < params.channelCount; i++) { channels[i] = connection.createChannel(); } for (int i = 0; i < params.queueCount; i++) { publishChannel.queueDeclare("queue-" + i, false, true, false, null); publishChannel.queueBind("queue-" + i, "amq.fanout", ""); } System.out.println("Declaration complete, running..."); while (true) { for (int i = 0; i < params.channelCount; i++) { publishChannel.basicPublish("amq.fanout", "", MessageProperties.BASIC, "".getBytes()); for (int j = 0; j < params.queueCount; j++) { while (channels[i].basicGet("queue-" + j, true) == null) { try { Thread.sleep(10); } catch (InterruptedException e) { Thread.currentThread().interrupt(); } } } } } } public static void main(String[] args) throws Exception { CommandLine cmd = Parameters.parseCommandLine(args); if (cmd == null) return; Parameters params = new Parameters(cmd); System.out.println(params.toString()); StressManagement test = new StressManagement(params); test.run(); } }