2013-09-05 5 views
5

Ich lese Dokumentation über prefetch buffer. Nach meinem Verständnis Wenn ich zuweisen Prefetch Wert = 1 an Verbraucher A. Activemq Push 1 Nachricht zu einem Zeitpunkt. A sendet A Bestätigung an activemq, dann nur activemq drücken Sie eine andere Nachricht an A.Wo Prefetch-Wert in activemq ändern

Mein Zweifel war, wo ich Prefetch-Wert zum Verbraucher zuweisen muss.

Muss ich Prefetch-Wert im Consumer-Programm zuweisen.Wenn es richtig ist, können Sie mit einfachen Code erklären.

Danke.

Antwort

9

Gemäß der ActiveMQ manual:

ActiveMQ verwendet eine Prefetch-Grenze, wie viele Nachrichten können an jedem beliebigen Punkt in der Zeit Verbraucher gestreamt werden. Sobald die Vorabrufgrenze erreicht ist, werden keine weiteren Nachrichten an den Verbraucher gesendet, bis der Verbraucher beginnt, Bestätigungen von Nachrichten zurückzusenden (um anzuzeigen, dass die Nachricht verarbeitet wurde). Der tatsächliche Prefetch-Grenzwert kann auf einer Pro-Verbraucher-Basis angegeben werden.

Um die PREFETCHSIZE für alle Verbrauchertypen ändern Sie eine Verbindung URI ähnlich verwenden würde:

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

Um die PREFETCHSIZE zu ändern nur für Konsumententypen Warteschlange würden Sie eine Verbindung URI verwenden ähnlich wie:

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

Es kann auch auf einer pro con konfiguriert werden auf Basis von Zieloptionen.

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

Vielen Dank für Ihre Antwort. Seit gestern versuche ich eine Aufgabe, die ich im folgenden [link] erklärt habe (http://stackoverflow.com/questions/18630657/how-to-push-messages-from-activemq-to-consumer). kannst du es einmal überprüfen. – Hanumath

+0

Ok, ich werde diesen Thread überprüfen. – anubhava

0

Obwohl es altes Gewinde ist.

Wenn Sie Feder verwenden mit ActiveMQ Integration

<!-- 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>