Rabbitmq 消息堆积测试

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());

你可能感兴趣的:(RabbitMQ)