1位来自不同队列的消费者RabbitMQ

时间:2018-11-28 07:54:21

标签: java rabbitmq

我有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条消息队列。

0 个答案:

没有答案