首页 > 解决方案 > 1 消费者从不同的队列 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 条消息。

标签: javarabbitmq

解决方案


推荐阅读