RabbitMQ 3.5和Message Priority Queue进程正在等待任务完成

时间:2015-07-10 15:21:45

标签: rabbitmq spring-amqp

我的应用程序中有一些基于优先级的任务。我有两个队列“queue1”和“queue2”,我想给队列1提供最高优先级,给队列2提供最低优先级。我设置queue1优先级编号为255,queue2优先级编号为200.执行任务时出现问题,一旦执行优先级任务,进程将等待任务完成同步。但是根据我们的项目需要,这个过程不应该等待,而是开始它。我如何实现它?

我评论了this 博客,

消息已收到部分:

final CountDownLatch latch = new CountDownLatch(3);
    ch.basicConsume(QUEUE, true, new DefaultConsumer(ch) {
        @Override
        public void handleDelivery(String consumerTag, Envelope envelope, BasicProperties properties, byte[] body) throws IOException {
            System.out.println("Received " + new String(body));
            latch.countDown();
        }
    });

    latch.await();

我已经在RabbitMQ https://pamlesleylu.wordpress.com/2013/02/02/hello-world-for-spring-amqp-and-rabbitmq/

中没有优先级队列的情况下完成了这个过程

生产者

  public void execute() {
    System.out.println("execute...");
    messageQueue.convertAndSend("hello " + counter.incrementAndGet());
}

消费

 public void onMessage(Message msg) {  
    System.out.println(new String(msg.getBody()));  
    try {  
        Thread.sleep(1000);  
    } catch (InterruptedException e) {  
        e.printStackTrace();  
    }  
}  

1 个答案:

答案 0 :(得分:0)

您需要将任务交给另一个线程(例如使用TaskExecutor)。

请记住,该消息将被激活,因此如果服务器崩溃,您将丢失该消息。

最好在侦听器容器中增加concurrency,以便一次处理多条消息。