У меня 3 очереди с разным приоритетом.Мне нужно, чтобы потребитель читал из этих очередей.Я объявил и настроил приоритет очередей в веб-интерфейсе RabbitMQ.Я использовал параметр 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)
ОБНОВЛЕНИЕ:
Я ожидаю, что потребитель принимает сообщения в разном порядке. Я хочу, чтобы потребитель брал из очереди с высоким приоритетом и иногда брал из других очередей в зависимости от приоритета. IМне нужно, чтобы все сообщения были переплетены друг с другом. Я не хочу, чтобы сообщения с низким приоритетом никогда не использовались, потому что сообщение с высоким приоритетом всегда перегружает.
ПРИМЕР:
У меня есть 3 очереди: высокий приоритет, средний приоритет, низкий приоритет и, например, я хочу, чтобы потребитель получал 10 сообщений из очереди высокого приоритета, 4 сообщения из очереди среднего приоритета и 1 сообщениеиз очереди с низким приоритетом.