2013-09-05 10 views
5

Przeczytałem dokumentację na temat prefetch buffer. W moim rozumieniu Jeśli przypisuję Prefetch wartość = 1 do konsumenta A. Activemq wypchnij 1 wiadomość naraz do A .once A wysyła potwierdzenie do activemq, a następnie tylko activemq przesyła inną wiadomość do A.Gdzie zmienić wartość prefetch w activemq

Moja wątpliwość polegała na tym, że muszę przypisać konsumentowi wartość preselekcji.

Czy muszę przypisać wartość prefetch w programie konsumenckim. Jeśli tak, to czy możesz wyjaśnić za pomocą prostego kodu.

Dzięki.

Odpowiedz

9

Jak na ActiveMQ manual:

ActiveMQ wykorzystuje limit preselekcji na ile wiadomości mogą być przesyłane do konsumenta w dowolnym momencie. Po osiągnięciu limitu preselekcji nie są już wysyłane żadne wiadomości do konsumenta, dopóki konsument nie rozpocznie wysyłania potwierdzeń wiadomości (w celu wskazania, że ​​przetworzono wiadomość ). Rzeczywista wartość limitu pobierania wstępnego może wynosić określona dla każdego konsumenta.

Aby zmienić wielkość preselekcji dla wszystkich typów konsumentów należałoby użyć połączenia URI podobny do:

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

Aby zmienić wielkość preselekcji dla właśnie kolejce typy konsumentów należałoby użyć połączenia URI podobny do:

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

To może być również skonfigurowany w przeliczeniu con sumer basis za pomocą opcji Destination Options.

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

Dzięki za odpowiedź. Od wczoraj próbuję jedno zadanie jasno wyjaśniłem w [link] (http://stackoverflow.com/questions/18630657/how-to-push-messages- from-activemq-to-consumer). możesz to sprawdzić raz. – Hanumath

+0

Dobrze, że sprawdzę ten wątek. – anubhava

0

Chociaż jest to stary wątek.

Jeśli używasz wiosna z integracją 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> 
Powiązane problemy