Hi Vadim,

On 7/31/06, Vadim Pesochinsky <[EMAIL PROTECTED]> wrote:

Hi!

I have a test case to consider. 2 servers are processing 3 submitted jobs
with following processing times 10 min, 1 min, 1 min. This sequence should
finish in 10 minutes as one service will pick up the 10 minutes job,
meanwhile the other one should manage the two 1 minute jobs. Since I cannot
set prefetchSize=0, one of the 1 minute jobs is sitting in prefetch buffer
and the jobs are processed in 11 minutes instead of 10.

I would think that a 10 min job will sit in the prefetch buffer in 1
consumer and a 1 min job sit in the prefetch buffer of the 2nd
consumer and the last 1 min job will not be in any prefetch buffer.
It will be waiting for one of the 2 consumers prefetch buffers to
empty.

Since the prefetch buffer usage is only decreased when the message is
acknowledged, if you acknowledge the message after you have processed
it, I think it should work how you want it to work.  If you are using
AUTO-ACK, the message gets acked as soon as the message is received()
before you process it.  So then another message queues up waiting for
your 10 min processing time.  I think if you witch to using client ack
or to using transacted sessions, things should work better for you.


This is simplification of the real scenario where I have about 30 consumers
submitting jobs to 20 consumers through AMQ 4.0.1. I have following
problems:

•       Messages are sitting in prefetch buffer are not available to processors,
which results in a lot of idle time.
•       Order of processing is random. For some reason Job # 20 is processed 
after
Job # 1500. Since senders are synchronously blocked this can result in
time-outs.

What can I do to work around these problems? Any configuration changes? How
to set prefetchSize=0; should submit a JIRA for this?

Environment & Configuration
AMQ 4.0.1
QUEUE_NAME?consumer.prefetchSize=1;consumer.dispatchAsync=true


<beans xmlns="http://activemq.org/config/1.0";>
    <!-- Allows us to use system properties as variables in this
configuration file -->
    <bean
class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"/>
    <broker useJmx="true" deleteAllMessagesOnStartup="true"
persistent="true" >
        <!-- Use the following to configure how ActiveMQ is exposed in JMX
-->

        <managementContext>
            <managementContext connectorPort="1099"
jmxDomainName="org.apache.activemq"/>
        </managementContext>

        <destinationPolicy>
            <policyMap>
                <policyEntries>
                    <policyEntry topic="FIN.>">
                        <dispatchPolicy>
                            <strictOrderDispatchPolicy />
                        </dispatchPolicy>
                        <pendingMessageLimitStrategy>
                            <constantPendingMessageLimitStrategy limit="0"/>
                        </pendingMessageLimitStrategy>
                        <messageEvictionStrategy>
                            <oldestMessageEvictionStrategy />
                        </messageEvictionStrategy>
                    </policyEntry>
                </policyEntries>
            </policyMap>
        </destinationPolicy>

        <persistenceAdapter>
            <kahaPersistentAdaptor dir="activemq-kaha"/>
        </persistenceAdapter>

        <transportConnectors>
            <transportConnector name="default" uri="tcp://localhost:61616"
discoveryUri="multicast://default"/>
        </transportConnectors>

        <networkConnectors>
            <networkConnector name="default"
uri="static://(tcp://localhost:61616)"/>
        </networkConnectors>
    </broker>
</beans>

--
View this message in context: 
http://www.nabble.com/Trouble-with-prefetch-buffer.-tf2029800.html#a5583273
Sent from the ActiveMQ - User forum at Nabble.com.




--
Regards,
Hiram

Blog: http://hiramchirino.com

Reply via email to