// 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.server; import static org.junit.Assert.assertEquals; import java.io.IOException; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.concurrent.CountDownLatch; import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeoutException; import org.junit.Test; import com.rabbitmq.client.AMQP; import com.rabbitmq.client.DefaultConsumer; import com.rabbitmq.client.Envelope; import com.rabbitmq.client.test.BrokerTestCase; public class PriorityQueues extends BrokerTestCase { @Test public void prioritisingBasics() throws IOException, TimeoutException, InterruptedException { String q = "with-3-priorities"; int n = 3; channel.queueDeclare(q, true, false, false, argsWithPriorities(n)); publishWithPriorities(q, n); List<Integer> xs = prioritiesOfEnqueuedMessages(q, n); assertEquals(Integer.valueOf(3), xs.get(0)); assertEquals(Integer.valueOf(2), xs.get(1)); assertEquals(Integer.valueOf(1), xs.get(2)); channel.queueDelete(q); } private List<Integer> prioritiesOfEnqueuedMessages(String q, int n) throws InterruptedException, IOException { final List<Integer> xs = new ArrayList<Integer>(); final CountDownLatch latch = new CountDownLatch(n); channel.basicConsume(q, true, new DefaultConsumer(channel) { @Override public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException { xs.add(properties.getPriority()); latch.countDown(); } }); latch.await(5, TimeUnit.SECONDS); return xs; } private void publishWithPriorities(String q, int n) throws IOException, TimeoutException, InterruptedException { channel.confirmSelect(); for (int i = 1; i <= n; i++) { channel.basicPublish("", q, propsWithPriority(i), "msg".getBytes("UTF-8")); } channel.waitForConfirms(500); } private AMQP.BasicProperties propsWithPriority(int n) { return (new AMQP.BasicProperties.Builder()) .priority(n) .build(); } private Map<String, Object> argsWithPriorities(int n) { Map<String, Object> m = new HashMap<String, Object>(); m.put("x-max-priority", n); return m; } }