7.4. 了解多播地址的内存使用情况
当消息路由到绑定了多播队列的地址时,内存中仅有一个消息副本。每个队列仅具有 对该消息的引用。因此,只有在引用了消息 的所有队列都 传送后,相关的内存才会被释放。
在这种情况下,如果消费者较慢,整个地址可能会受到性能负面影响。
例如,考虑这种情况:
- 地址有十个使用多播路由类型的队列。
- 由于消费者速度较慢,其中一个队列不发送其消息。其他九个队列继续发送消息,并且为空。
- 消息继续到达地址。具有较慢消费者的队列继续积累对消息的引用,从而导致代理将消息保留在内存中。
- 当达到地址的最大大小时,代理会开始页信息。
在这种场景中,因为单一消费者较慢,所有 队列中的消费者都被迫消耗来自页面系统的消息,需要额外的 IO。
其它资源
- 要了解如何配置流控制来规范代理和生产者与消费者之间的数据流,请参阅 AMQ Core Protocol JMS 文档中的 流控制。