环境: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 的缺省值如下:
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
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
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
没有评论:
发表评论