2013-09-05 11 views
5

Ho letto la documentazione su prefetch buffer. Come per la mia comprensione Se assegno Prefetch valore = 1 al consumatore A. Activemq invia 1 messaggio alla volta A A una volta A invia conferma ad activemq, quindi solo activemq invia un altro messaggio a A.Dove cambiare il valore di precaricamento in activemq

Il mio dubbio era, dove devo assegnare il valore di prefetch al consumatore.

Devo assegnare il valore di prefetch nel programma consumer. Se è corretto, puoi spiegarlo con un semplice codice.

Grazie.

risposta

9

Come per il ActiveMQ manual:

ActiveMQ utilizza un limite prefetch su quanti messaggi possono essere trasmessi ad un consumatore in qualsiasi punto nel tempo. Una volta raggiunto il limite di prefetch, non vengono più inviati messaggi all'utente finché l'utente inizia a inviare conferme di ricezione dei messaggi (per indicare che il messaggio è stato elaborato). Il valore limite di prefetch attuale può essere specificato in base al consumo.

Per modificare la dimensione di precaricamento per tutti i tipi di consumatori si usa una connessione URI simile a:

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

Per modificare la dimensione di precaricamento solo per la fila tipi di consumatori si usa una connessione URI simile a:

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

Essa può anche essere configurato in modo di per con base sumer utilizzando le opzioni di destinazione.

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

Grazie per la risposta. Da ieri in poi, sto provando un compito chiaramente spiegato nel seguente [collegamento] (http://stackoverflow.com/questions/18630657/how-to-push-messages-from-activemq-to-consumer). puoi controllarlo una volta. – Hanumath

+0

Ok sicuro che controllerò quella discussione. – anubhava

0

Anche se è vecchio thread.

Se si utilizza la primavera con l'integrazione di 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>