总结:在使用springAMQ直接设置消息的优先级是无效的,必须先指定队列的最大优先级的情况下优先级才会生效
这是我的rabbitmq队列没设置最大优先级的情况
//
@Bean
// 这是我的rabbitmq队列没有设置队列最大优先级
public Queue myQueu() {
Map<String, Object> map = new HashMap<>();
return new Queue("myqueue", true, false, false, map);
}
//-----------------------------
// 这里我发送了两条消息,注意:setPriority数值越大优先级越大
@Bean
public ApplicationRunner runner(){
MessageProperties properties1 = new MessageProperties();
properties1.getHeaders().put("desc", "描述信息,优先级为0,但先发");
properties1.setPriority(0);
Message message1 = new Message("测试message".getBytes(), properties1);
MessageProperties properties2 = new MessageProperties();
properties2.getHeaders().put("desc", "描述信息,优先级为9,但后发");
properties2.setPriority(9);
Message message2 = new Message("测试message".getBytes(), properties2);
template.convertAndSend("directExchange", "myBinding", message1);
template.convertAndSend("directExchange", "myBinding", message2);
return args -> {};
}
正常情况下,发消息是先进先出,但这设置了消息优先级,后发的消息优先级更大一些,预期应该是够发消息在上面
但是和预期的不同,得到的是先进先出的顺序
!!!重要点
@Bean
// 这是我的rabbitmq队列没有设置队列最大优先级
public Queue myQueu() {
Map<String, Object> map = new HashMap<>();
// 这行代码很关键,设置最大优先级,注意最大不超过255
map.put("x-max-priority", 10);
return new Queue("myqueue", true, false, false, map);
}
设置最大优先级后,注意最大不超过255,最后就得到预习效果了