2016年7月21日星期四

ActiveMQ_041:消息的预取机制

环境:MAC OS X 10.11.5 + ActiveMQ 5.13.3

ActiveMQ 通过消息预取机制来提高性能,这意味着客户端的内存里可能会缓存一定数量的消息。缓存消息的数量由 prefetch size 来控制。
当某个 consumer 的 prefetch size 已经达到上限,那么broker 不会再向 consumer 分发消息,直到 consumer 向 broker 发送消息的确认。
对于快消费者,你可以设置较大的 prefetch size;对于慢消费者,建议设置 prefetch size =1。
prefetch size 的缺省值如下:
  • persistent queues : 1000
  • non-persistent queues : 1000
  • persistent topics: 100
  • non-persistent topics: Short.MAX_VALUE -1
客户端可以重写 prefetch size,有两种方式:

1. Connection  级别重写
(1)通过 Connection URI 指定 prefetch size
例如:
所有的消费者的预取大小:tcp://localhost:61616?jms.prefetchPolicy.all=50
所有 Queue 的消费者的预取大小:tcp://localhost:61616?jms.prefetchPolicy.queuePrefetch=1
 (2)纯代码实现
在 ActiveMQConnectionFactory 或者 ActiveMQConnection 上设置 ActiveMQPrefetchPolicy 对象来配置 prefetch policy。

2.  Destination 级别重写
例如:
queue = new ActiveMQQueue("TEST.QUEUE?consumer.prefetchSize=10");
consumer = session.createConsumer(queue);

参考文献:
1. http://activemq.apache.org/what-is-the-prefetch-limit-for.html

没有评论: