package threshold; import java.util.Arrays; import java.util.HashMap; import java.util.List; import java.util.Map; import com.rabbitmq.client.Channel; import com.rabbitmq.client.QueueingConsumer; import common.AMQPCommon; public class AMQPConsumer { //actual response times int lower = 0; int upper = 0; public void execute(String mode) throws Exception { Channel channel = AMQPCommon.connect(); QueueingConsumer consumer = new QueueingConsumer(channel); channel.basicConsume("trade.request.q", true, consumer); if (mode.equalsIgnoreCase("stable")) {lower = 300; upper = 1200;} if (mode.equalsIgnoreCase("better")) {lower = 300; upper = 800;} if (mode.equalsIgnoreCase("worse")) {lower = 800; upper = 1900;} if (mode.equalsIgnoreCase("erratic")) {lower = 200; upper = 5000;} while (true) { QueueingConsumer.Delivery message = consumer.nextDelivery(); String msg = new String(message.getBody()); System.out.println("trade order received: " + msg); int response = lower + (int) (Math.random() * (upper-lower)); System.out.println("trade placed, duration = " + response); String newMsg = "response"; byte[] bmsg = newMsg.getBytes(); Thread.sleep(response); channel.basicPublish("", "trade.response.q", null, bmsg); } } public static void main(String[] args) throws Exception { if (args.length == 0) { System.out.println("specify mode (worse, better, stable, erratic)"); } else { new AMQPConsumer().execute(args[0]); } } }