我阅读了有关prefetch buffer
的文档。根据我的理解如果我将Prefetch
value = 1分配给消费者A.Activemq一次推送1消息给A .once A发送确认给activemq,然后只有activemq将另一条消息推送给A。
我的疑问是,我需要为消费者分配预取值。
我需要在消费者程序中分配预取值。如果它是正确的,你能用简单的代码解释。
感谢。
答案 0 :(得分:10)
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>