本文共 805 字,大约阅读时间需要 2 分钟。
1. 问题
在rabbitmq的pub/sub模式中,是否会出现消息堆积现象。比如,生产者向exchange发送了大量消息,而此时consumer不work,无法处理,等到consumer online后,是否会接受到大量的消息?
初学者,特进行尝试
2. 结论
------queue1
pub-------exchange-------
-------queue2
此种模式下,如果发送了20条消息,待两个consumer 启动后,各收到20个(前提是已经启动过,exchange和queue1, queue2之间有binding关系)
------queue
pub-------exchange-------
-------queue
此种模式,同样20条消息,同样的情形,采用round-robin方式分发,各收到10个。(前提是已经启动过,exchange和queue1, queue2之间有binding关系)
只有queue注册的exchange上,才会收到fanout的消息,如果发送20条消息,然后启动两个consumer(先解除queue和exchange的binding关系,因为最初是没有binding关系的),根本无法收到堆积的消息。
由于pub/sub采用的是动态队列,所以consumer启动时,是不可能收到堆积的消息的。
3. 队列消息数目
当然,如果不是动态队列,我们可以通过以下方法获取队列中的message数目。
channel.exchangeDeclare(EXCHANGE_NAME, "fanout",true);
DeclareOk DeclareOk=channel.queueDeclare("queue", true, false,false,null); System.out.println(DeclareOk.getMessageCount());转载地址:http://rrfpf.baihongyu.com/