我有3个具有不同优先级的队列。我需要消费者从这些队列中读取。我在RabbitMQ Web界面上声明并配置了队列的优先级。我使用了x-maximum-priority
参数来设置差异值(https://www.rabbitmq.com/priority.html)。
这是代码:
public static void main( String[] args ) throws IOException, TimeoutException, InterruptedException
{
....
//Conection details
System.out.println(" [x] Waiting ");
Consumer consumer = new DefaultConsumer(channel) {
@Override
public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException {
AMQP.BasicProperties replyProps = new AMQP.BasicProperties
.Builder()
.correlationId(properties.getCorrelationId())
.build();
String message = new String(body,"UTF-8");
System.out.println(message);
Thread.sleep(2000);//To simulate a big operation
channel.basicAck(envelope.getDeliveryTag(), false);
};
channel.basicConsume("high_priority", false, consumer);
channel.basicConsume("medium_priority", false, consumer);
channel.basicConsume("low_priority", false ,consumer);
}
但是使用者使用第一个队列,当它为空时,它从第二个队列中取出,而当它为空时,它从第三个队列中取出。
这是一个不好的方法吗?最好使用3个消费者吗?可以与消费者优先考虑合作吗? (https://www.rabbitmq.com/consumer-priority.html)
更新:
我希望使用者以不同的顺序接收消息。我希望消费者根据优先级从高优先级队列中获取,偶尔从其他队列中获取。我需要以交织的方式使用所有消息。我不希望永远不要消耗低优先级的消息,因为高优先级的消息总是会被超越。
示例:
我有3个队列:高优先级,中优先级,低优先级,例如,我希望使用者从高优先级队列中获取10条消息,从中优先级队列中获取4条消息,从低优先级中获取1条消息队列。