介绍
RabbitMQ 会将消息轮询地分发给所有绑定的消费者。多个消费者能够并发处理消息,提高了处理效率和系统的鲁棒性。
多个消费者
如果有50条消息将会 a1 a2 a1 a2 的方式进行去轮询消费
java
@RabbitListener(queues ="insert.queue") ///insert.queue 为监听的队列名称
public void a1(String msg){ //消息消费
System.out.println(msg);
//....其他业务逻辑
}
@RabbitListener(queues ="insert.queue") ///insert.queue 为监听的队列名称
public void a2(String msg){ //消息消费
System.out.println(msg);
//....其他业务逻辑
}
这种方式消息只能被消费一次
在有的时候可能a1 的消费者处理的快一点,a2处理的慢一点 ,而还是以a1 a2 a1 a2这种方式去轮询速度就慢,希望让消费的快一点的多去处理一些消息就不会造成堵塞。
解决方案
yaml
spring:
rabbitmq:
host: 103.73.160.148
port: 5673 #通信端口
virtual-host: /csdn #虚拟主机名称
username: csdn
password: 123456
listener:
simple:
prefetch: 1 #每次获取消费一个消息,处理完在获取
这样就可以达到消费能力好的去多处理一些消息,性能差的就去少处理消息。