ActiveMQ使用生产者堵塞的问题

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

转载于:https://my.oschina.net/dreamnight/blog/729495

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值