1 Потребитель, который берет из разных очередей RabbitMQ - PullRequest
0 голосов
/ 28 ноября 2018

У меня 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 сообщениеиз очереди с низким приоритетом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...