Rabbitmq';s优先级队列
Rabbitmq的优先级队列机制已经过测试,只有在生产者在使用者启动之前发布消息时才会生效。如何解决这个问题Rabbitmq';s优先级队列,rabbitmq,Rabbitmq,Rabbitmq的优先级队列机制已经过测试,只有在生产者在使用者启动之前发布消息时才会生效。如何解决这个问题 **Code snippet** 消费者: Map<String,Object> args = new HashMap<String,Object>(); args.put("x-max-priority", 10); channel.queueDeclare(TEST_PRIORITY_QUEUE, true, fa
**Code snippet**
消费者:
Map<String,Object> args = new HashMap<String,Object>();
args.put("x-max-priority", 10);
channel.queueDeclare(TEST_PRIORITY_QUEUE, true, false, false,args);
//omit... ...
DeliverCallback deliverCallback= (consumerTag, delivery) -> {
try {
String message = new String(delivery.getBody(), "UTF-8");
System.out.println("message="+message);
Thread.sleep(20*1000);
}catch (Exception e) {
e.printStackTrace();
}finally {
channel.basicAck(delivery.getEnvelope().getDeliveryTag(), false);
}
};
//... ...
Map args=newhashmap();
参数put(“x-max-priority”,10);
channel.queueDeclare(TEST\u PRIORITY\u QUEUE,true、false、false、args);
//省略。。。
DeliverCallback DeliverCallback=(消费者标记,交货)->{
试一试{
字符串消息=新字符串(delivery.getBody(),“UTF-8”);
System.out.println(“message=“+message”);
线程。睡眠(20*1000);
}捕获(例外e){
e、 printStackTrace();
}最后{
channel.basicAck(delivery.getEnvelope().getDeliveryTag(),false);
}
};
//... ...
制作人:
for (int i = 0; i <20; i++) {
String messagelow = "lowLevelMsg";
channel.basicPublish(TEST_EXCHANGE_direct,
"prikey",
new BasicProperties.Builder().priority(1).build(),
messagelow.getBytes());
}
String messagehigh = "HigherLevelMsg";
channel.basicPublish(TEST_EXCHANGE_direct,
"prikey",
new BasicProperties.Builder().priority(9).build(),
messagehigh.getBytes());
for(int i=0;i