> 1.隊列設置最大優先級,限定優先級范圍0-max,通過參數`x-max-priority`
> 2.發送消息指定優先級
> 3.在消息有積壓時,會優先處理優先級高的消息
1. 配置優先隊列
```
@Slf4j
@Component
public class PriorityConfig {
public static final String EXCHANGE = "priority-exchange";
public static final String QUEUE = "priority-queue";
public static final String ROUTING_KEY = "priority_key";
/**
* 定義優先級隊列
*/
@Bean
Queue queue() {
Map<String, Object> args= new HashMap<>();
args.put("x-max-priority", 10); //設置優先級,范圍0-255,此處設為10,則允許優先級的范圍為0-10
return new Queue(QUEUE, false, false, false, args);
}
/**
* 定義交換器
*/
@Bean
DirectExchange exchange() {
return new DirectExchange(EXCHANGE);
}
@Bean
Binding binding(Queue queue, DirectExchange exchange) {
return BindingBuilder.bind(queue).to(exchange).with(ROUTING_KEY);
}
}
```
2. 生產者
```
/**
* 模擬發送多條數據
*/
@GetMapping("/sendPriorityMessage")
public void sendPriorityMessage(){
String message = "";
for (int i = 0; i < 10;i++){
message = "info" + i;
if (i == 5){ // i= 5 設置優先級為10 ,優先級也可以作為形參接受
rabbitTemplate.convertAndSend(PriorityConfig.EXCHANGE,PriorityConfig.ROUTING_KEY,message,msg -> {
msg.getMessageProperties().setPriority(10);
return msg;
});
}else {
rabbitTemplate.convertAndSend(PriorityConfig.EXCHANGE,PriorityConfig.ROUTING_KEY,message,msg -> {
msg.getMessageProperties().setPriority(5);
return msg;
});
}
}
log.info("發出消息success");
}
```
場者