1、多消費者的時候,mq的調試很麻煩!因為dev,local環境的消費者也會消費rabbitmq的消息,一般的辦法是多發幾次
優先消費者
rabbitmq3.2以上可以對消費者進行排序。
springboot方案
對於springboot工程@RabbitListener,里面有一個參數priority,這個是配置消費者的優先級,默認為0,數值越大優先級越高。
@RabbitListener(queues="${xxQueueName}",containerFactory = "xxxContainerFactory",priority = "3")
public void onMessage(Message message,Channel channel) throws Exception {
try catch finally
}
原生api方案
如果不是使用springboot工程,用原生的api,可以在創建消費者的時候傳入參數x-priority
Map<String, Object> map = new HashMap<>();
map.put("x-priority",5);
channel.basicConsume("queueName",true,map,new DefaultConsumer(channel){
@Override
public void handleDelivery(String consumerTag,
Envelope envelope,
AMQP.BasicProperties properties,
byte[] body)
throws IOException {
}
});
注意點
1.消費者的優先級設定是通過建立消費的basicConsume的時候設定的arguements的x-priority
2.當高優先級的消費者未出現阻塞或者限制的時候,那么低優先級的消費者是不能拿到消息的
3.當高優先級的消費者出現阻塞等其他限制的情況的時候,消息才會發向給低優先級的消費者
4.對於是否設定消費者優先級需要按照需求進行設定,如果盲目添加可能導致其他消費者拿不到消息!