我阅读了与预取缓冲器
相关的文档。据我所知,如果我将Prefetch
值分配给消费者A,则Activemq每次向A推送1条消息。一旦A向activemq发送确认,activemq才会将另一条消息推送到A。
我的疑问是,在哪里需要为消费者分配预取值。
我需要在消费者程序中分配预取值吗?如果是,请用简单的代码进行解释。
谢谢。
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);
虽然这是一个旧的线程。
如果你正在使用Spring与ActiveMQ集成:
<!-- 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>