ActiveMQ可以开启或关闭生产者流量控制Producer Flow Control ,基本原理是producer 发送一条消息会收到broker返回的ack响应,当磁盘或内存快满的时候broker就会限制producer发送消息,让部分producer处于等待状态。
<destinationPolicy> <policyMap> <policyEntries> <policyEntry topic="FOO.>" producerFlowControl="false"/> </policyEntries> </policyMap> </destinationPolicy>
vmQueueCursor参数主要针对非持久化消息,activemq5.0以后非持久化消息会存储在temp store磁盘空间以释放内存,如果我们希望非持久化消息全部存储在内存中,达到memorylimit后阻止producer继续发送,就可以这么使用
<policyEntry queue=">" producerFlowControl="true" memoryLimit="1mb"> //memoryLimit指定单个queue分配的内存空间 <pendingQueuePolicy> <vmQueueCursor/> </pendingQueuePolicy> </policyEntry>