优先级队列
方式一:可以通过RabbitMQ管理界面配置队列的优先级属性,如下图的x-max-priority
方式二:代码设置
Map<String,Object> args = new HashMap<String,Object>(); args.put("x-max-priority", 10); channel.queueDeclare("queue_priority", true, false, false, args); |
这里设置的是一个队列queue的最大优先级,之后要在发送的消息中设置消息本身的优先级,设置代码:
AMQP.BasicProperties.Builder builder = new AMQP.BasicProperties.Builder(); builder.priority(5); AMQP.BasicProperties properties = builder.build(); channel.basicPublish("exchange_priority","rk_priority",properties,("messages").getBytes()); |
完整代码:生产者
public class Producer { public static final String ip = "10.0.40.127"; public static final int port = 5672; public static final String username = "admin"; public static final String password = "123456";
public static void main(String[] args) throws IOException{ ConnectionFactory connectionFactory = new ConnectionFactory(); connectionFactory.setPassword(password); connectionFactory.setUsername(username); connectionFactory.setPort(port); connectionFactory.setHost(ip);
/* Connection connection = connectionFactory.newConnection(); Channel channel = connection.createChannel();
//create exchange channel.exchangeDeclare("exchange_priority", "direct", true);
//create queue with priority Map<String, Object> params = new HashMap<>(); params.put("x-max-priority", 10); channel.queueDeclare("queue_priority", true, false, false, params); channel.queueBind("queue_priority", "exchange_priority", "rk_priority");
//send message with priority for (int i = 0; i < 10; i++) { AMQP.BasicProperties.Builder builder = new AMQP.BasicProperties.Builder(); if (i % 2 == 0) { builder.priority(5); } AMQP.BasicProperties properties = builder.build(); channel.basicPublish("exchange_priority", "rk_priority", properties, ("produce messages-" + i).getBytes()); }
channel.close(); connection.close();*/ } } |
消费者