我的生产者阻塞
如果我的生产者阻塞发送消息,我该怎么办?
这与 生产者流量控制 相关。
Active 4.x
在 ActiveMQ Classic 4.x 中,所有传输中的消息都保存在内存中。如果您有一个缓慢的消费者,为了避免耗尽 JVM 内存并出现内存不足错误,ActiveMQ Classic 对其将保存的传输中消息数量设置了可配置的限制。达到限制后,生产者将被减速/阻塞。
快速修复只是在 XML 配置 中的 usageManager 中增加设置。与 ActiveMQ Classic 一起提供的默认设置非常低,只有 20MB 的 RAM,因此尝试将其设置为更大的值,例如 512MB。
另一种方法是在不同的目的地以及生产者与消费者之间设置单独的 usageManager 限制。
您可能还想使用 JMX 支持或 Web 控制台 来查看正在使用的目的地以及您拥有的生产者和消费者,以了解发生了什么。
Active 5.x 及更高版本
从 ActiveMQ Classic 5.x 开始,支持 消息游标,默认情况下它们将消息从内存移到磁盘。因此,除非您填满了用于消息存储的最大分配磁盘空间(通常比内存大一个数量级),否则您不会遇到此问题。