哪里可以更改activemq中的预取值

时间:2013-09-05 11:02:11

标签: jms activemq

我阅读了有关prefetch buffer的文档。根据我的理解如果我将Prefetch value = 1分配给消费者A.Activemq一次推送1消息给A .once A发送确认给activemq,然后只有activemq将另一条消息推送给A。

我的疑问是,我需要为消费者分配预取值。

我需要在消费者程序中分配预取值。如果它是正确的,你能用简单的代码解释。

感谢。

2 个答案:

答案 0 :(得分:10)

根据ActiveMQ manual

  

ActiveMQ使用预取限制来确定可以流式传输的邮件数量   消费者在任何时间点。达到预取限制后,   在消费者之前不再向消费者发送消息   开始发回消息的确认(以表明消息   消息已被处理)。实际的预取限制值可以是   根据每个消费者的具体情况。

要更改所有使用者类型的预取大小,您将使用类似于以下的连接URI:

tcp://localhost:61616?jms.prefetchPolicy.all=50

要更改仅排队使用者类型的预取大小,您可以使用类似于以下的连接URI:

tcp://localhost:61616?jms.prefetchPolicy.queuePrefetch=1

也可以使用目的地选项在每个消费者的基础上进行配置。

queue = new ActiveMQQueue("TEST.QUEUE?consumer.prefetchSize=10");
consumer = session.createConsumer(queue);

答案 1 :(得分:0)

虽然它是老线程。

如果您使用带有ActiveMQ集成的spring

<!-- A connection to ActiveMQ -->
    <bean id="orderStatusAmqConnectionFactory" class="org.apache.activemq.ActiveMQConnectionFactory">
        <property name="brokerURL">
         <value>tcp://localhost:61616</value>
        </property>
        <property name="prefetchPolicy" ref="prefetchPolicy" /> 
         <property name="optimizeAcknowledge" value="true" /> 
         <property name="useAsyncSend" value="true" />
         <property name="trustedPackages">
        <list>
            <value>com.myapp.tradingplatform</value>
            <value>java</value>
        </list>
    </property>
    </bean>

<bean id="prefetchPolicy" class="org.apache.activemq.ActiveMQPrefetchPolicy">
    <property name="queuePrefetch" value="1000" />
</bean>
    <!-- A cached connection to wrap the ActiveMQ connection -->
    <bean id="orderStatusCachedConnectionFactory"
        class="org.springframework.jms.connection.CachingConnectionFactory">
        <property name="targetConnectionFactory">
            <ref bean="orderStatusAmqConnectionFactory" />
        </property>
        <property name="sessionCacheSize">
            <value>100</value>
        </property>
    </bean>