关于RabbitMQ消息分配机制
最新推荐文章于 2024-07-14 23:14:03 发布
channel.basicConsume(QUEUE_NAME, true, defaultConsumer);
中间写为true,意思就是自动签收消息,这样的话,如果生产者生产了100个消息,倘若有两个消费者,他们两个消费者将会每人拿到50个消息,如果此时两个消费者其中之一出现阻塞的状况,那么会导致另一个消费者早早的已经完成的自己50个消息的任务,而阻塞的消费者却还在慢慢的自己消费,这样造成了资源被浪费!channel.basicQos(1);
这个语句,同时开启手动应答:channel.basicQos(1)
;,会不会出现能者多劳的情况呢?答案是不会的,倘若开启了自动应答,就算消费者提供了channel.basicQos(1)
,表示自己最大只能承受一个消息的量,但是还是会默认强制性的将不同的消费者分配给均等的消息数量使其处理,自动应答的优先级要高于channel.basicQos(1)
。