1:activeMQ默认的生产者发送的是Persistent message,这种消息的发送每次都需要等待broker给一个确认回复才能进行下一条消息的发送,这种可以在activemq.xml上设置流控,broker检测到目标空间已满时将会阻塞生产者,这种情况我们可以在systemUsage设置sendFailIfNoSpace=true,这样broker会给生产者抛出一个javax.jms.ResourceAllocationException的异常,这样生产者在catch到异常之后可以继续下一步的业务而不会阻塞。
2:我们可以给ActiveMQConnectionFactory设置useAsyncSend,使用异步消息发送模式non_persistent message,在这种模式下,如果内存限制已满时,生产者不会得到通知,但是我们可以给ActiveMQConnectionFactory设置一个producerWindowSize来控制生产者的流量,这个值就是生产者在等到broker的确认消息之前可以发送的最大字节量,如果broker阻塞了或者坏了,我们的生产者一直无法得到broker的确认消息,而阻塞在生产者里的消息已经达到了最大限制
3:当我们MQ只部署了一台时,生产者连接参数设置了failover,但是会存在一个问题,如果ActiveMQ挂了,生产者会不断重试,而且不抛出错误,hang住服务。
生产者流控【http://activemq.apache.org/producer-flow-control.html】