activemq ACK

activemq的ACK确认方式

AUTO_ACKNOWLEDGE = 1 自动确认
CLIENT_ACKNOWLEDGE = 2 客户端手动确认
DUPS_OK_ACKNOWLEDGE = 3 自动批量确认
SESSION_TRANSACTED = 0 事务提交并确认
INDIVIDUAL_ACKNOWLEDGE方式:单条确认方式。这种方式是ActiveMQ单独提供的一种方式,其常量定义的位置都不在javax.jms.Session规范接口中,而是在org.apache.activemq.ActiveMQSession这个类中。这种方式消费者端将会逐条向ActiveMQ服务端发送ACK信息。所以这种ACK方式的性能很差,除非您有特别的业务要求,否则不建议使用。

默认

默认是AUTO_ACKNOWLEDGE
对于consumer来说,optimizeAcknowledge只有在AUTO_ACKNOWLEDGE 时才有效。
optimizeAcknowledge是对ack进行优化,它对客户端的性能来说是一个非常不错的属性
而optimizeAcknowledge = true的时候 prefetchSize才有意义

消费者关键策略中,需要重点讨论的是消费者“预取数量”——prefetchSize。可以想象,如果消费者端的工作策略是按照某个周期(例如1秒),主动到服务器端一条一条请求新的消息,那么消费者的工作效率一定是极低的;所以ActiveMQ系统中,默认的策略是ActiveMQ服务端一旦有消息,就主动按照设置的规则推送给当前活动的消费者。其中每次推送都有一定的数量限制,这个限制值就是prefetchSize。

针对Queue工作模型的队列和Topic工作模型的队列,ActiveMQ有不同的默认“预取数量”;针对NON_PERSISTENT Message和PERSISTENT Message,ActiveMQ也有不同的默认“预取数量”:

PERSISTENT Message—Queue:prefetchSize=1000
NON_PERSISTENT Message—Queue:prefetchSize=1000
PERSISTENT Message—Topic:prefetchSize=100
NON_PERSISTENT Message—Topic:prefetchSize=32766
ActiveMQ中设置的各种默认预取数量一般情况下不需要进行改变。如果您使用默认的异步方式从服务器端推送消息到消费者端,且您对消费者端的性能有足够的信心,可以加大预取数量的限制。但是非必要情况下,请不要设置prefetchSize=1,因为这样就是一条一条的取数据;也不要设置为prefetchSize=0,因为这将导致关闭服务器端的推送机制,改为客户端主动请求。

如果启用了optimizeAcknowledge ,那么prefetchSize设置小些。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值