优先队列的注意点:
只有当消费者不足,即消息无法被即使消费而阻塞的时候,优先队列才会根据优先级来分配任务的执行顺序.
**
步骤:
1配置类:
@Configuration
public class priQueue {
private static final String EXCHANGE = "priority-exchange";
public static final String QUEUE = "priority-queue";
private static final String ROUTING_KEY = "priority.queue";
@Bean
DirectExchange exchange1(){
return new DirectExchange(EXCHANGE);
}
@Bean
Queue queue1(){
Map<String,Object>map = new HashMap<>();
map.put("x-max-priority",10);//设置最大的优先级数量
return new Queue(QUEUE,true,false,false,map);
}
@Bean
public Binding binding1(){
return BindingBuilder.bind(queue1()).to(exchange1()).with(ROUTING_KEY);
}
}
2生产者
@Component
public class priConsumer {
private static final String EXCHANGE = "priority-exchange";
public static final String QUEUE = "priority-queue";
private static final String ROUTING_KEY = "priority.queue";
@Autowired
RabbitTemplate template;
public void test(){
for(int i=10;i>1;i--){
int finalI = i;
template.convertAndSend(EXCHANGE,ROUTING_KEY,"queue:"+i, message -> {
message.getMessageProperties().setPriority(finalI);
return message;
});
}
}
}
3消费者:
@Component
@RabbitListener(queues ="priority-queue")
public class pricon {
@RabbitHandler
public void hand(String str){
System.out.println("接受到了一个消息:"+str);
}
}
4测试类
5结果