我的应用程序中有一些基于优先级的任务。我有两个队列“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();
}
}
答案 0 :(得分:0)
您需要将任务交给另一个线程(例如使用TaskExecutor
)。
请记住,该消息将被激活,因此如果服务器崩溃,您将丢失该消息。
最好在侦听器容器中增加concurrency
,以便一次处理多条消息。