Ah, that attribute isn't documented on the activemq site ;)

I tried that one out, but unfortunately I don't see any change in
behavior.  I verified that the prefetchSize is indeed set to 1 by
examining the network connector attributes for both brokers via jmx.

Thank you so much for your help so far, I really do appreciate it.

I'm going to start digging through the code to see if I can determine
why these messages refuse to budge.  I'll probably start by seeing if
Joe's assumption about messages not visiting a broker more than once
is the cause.

If you or anyone else has any other tips or suggestions, I'd love to
hear them.

On Thu, Oct 08, 2009 at 05:42:48PM +0100, Rob Davies wrote:
> Hi Eric,
>
> sorry for being so quick in my reply - in the broker xml config set
> the prefetchSize property on the network - e.g.
>
> <networkConnectors>
>          <networkConnector
>               uri="static://(tcp://localhost:61617)"
>               name="Connection to 61617"
>               dynamicOnly="true"
>            prefetchSize="1"/>
>
>   </networkConnectors>
> On 8 Oct 2009, at 17:16, Eric Van Dewoestine wrote:
>
> > I guess I'm not sure what setting you are referring to.  I tried
> > setting a couple different prefetch policies on the tcp connector like
> > so:
> >
> > 1st attempt:
> > <transportConnector
> >  uri="tcp://${broker.host}:0?jms.prefetchPolicy.queuePrefetch=1"
> >  discoveryUri="multicast://default?group=${broker.group}"/>
> >
> > 2nd attempt:
> > <transportConnector
> >  uri="tcp://${broker.host}:0?jms.prefetchPolicy.all=1"
> >  discoveryUri="multicast://default?group=${broker.group}"/>
> >
> > But neither of them seemed to change the behavior.  Are you referring
> > to another setting?  Can you provide an example of the setting you are
> > referring to?
> >
> > On Thu, Oct 08, 2009 at 04:22:11PM +0100, Rob Davies wrote:
> >> do you set the prefetchSize property on the network itself ? Setting
> >> it on the consumers wouldn't make any difference
> >> On 8 Oct 2009, at 15:39, Eric Van Dewoestine wrote:
> >>
> >>> I tried setting the prefetchSize to 1 for both consumers, but
> >>> unfortunately, that didn't resolve the issue.  Messages still end up
> >>> stuck on B2 when C2 is stopped.
> >>>
> >>> On Thu, Oct 08, 2009 at 09:33:06AM +0100, Rob Davies wrote:
> >>>> set the prefetchSize=1 on your network - to avoid orphaned messages
> >>>> on
> >>>> B2
> >>>>
> >>>> On 7 Oct 2009, at 20:06, Eric Van Dewoestine wrote:
> >>>>
> >>>>> Hmm, that seems like a flawed approach if the broker it visited
> >>>>> has
> >>>>> changed state and is now eligible to process those messages.
> >>>>> How is
> >>>>> this type of fail over intended to be handled with activemq?  Is
> >>>>> there
> >>>>> an alternate solution that I'm missing?
> >>>>>
> >>>>> On Wed, Oct 07, 2009 at 11:43:49AM -0700, Joe Fernandez wrote:
> >>>>>>
> >>>>>> I think that by design a message will not be forwarded to a
> >>>>>> broker
> >>>>>> that it
> >>>>>> has already visited.
> >>>>>>
> >>>>>> Joe
> >>>>>> http://www.ttmsolutions.com
> >>>>>>
> >>>>>>
> >>>>>> Eric Van wrote:
> >>>>>>>
> >>>>>>> ActiveMQ 5.3.0_SNAPSHOT (Sep 8th according to the snapshots
> >>>>>>> listing)
> >>>>>>>
> >>>>>>> I'm running into an issue with the store and forward feature of
> >>>>>>> activemq, which I using in an attempt to create a highly
> >>>>>>> available
> >>>>>>> distributed queue.  I'm trying to figure out if the issue is a
> >>>>>>> misconfiguration on my part, expected behavior of activemq, or a
> >>>>>>> bug.
> >>>>>>>
> >>>>>>> The summary of the problem is that given 2 brokers, B1 and B2,
> >>>>>>> which
> >>>>>>> each have one consumer, C1 and C2, which are subscribed to the
> >>>>>>> same
> >>>>>>> queue.  If I stop a consumer on one of the brokers, the pending
> >>>>>>> messages from that broker are not always forwarded to the other
> >>>>>>> broker
> >>>>>>> which still has a consumer, leading to those messages getting
> >>>>>>> indefinitely stuck.
> >>>>>>>
> >>>>>>> The steps I use to reproduce this scenario are as follows (Note:
> >>>>>>> all
> >>>>>>> producing and consuming is performed over the stomp transport):
> >>>>>>>
> >>>>>>> Couple notes about the consumers:
> >>>>>>> - they have a prefetchSize of 40
> >>>>>>> - the processing of messages can take some time, so for the
> >>>>>>> purposes
> >>>>>>> of this exercise, I've created a simple consumer that sleeps for
> >>>>>>> 10
> >>>>>>> seconds before sending the message ack (using client-individual
> >>>>>>> ack
> >>>>>>> mode)
> >>>>>>>
> >>>>>>> 1. start both brokers (B1 and B2). The consumers (C1 and C2) are
> >>>>>>> not
> >>>>>>> yet running.
> >>>>>>> 2. produce a few thousand messages to B1
> >>>>>>> Note: B1 now has a few thousand pending messages and B2 has 0.
> >>>>>>> 3. start consumer C2 (listing for messages from B2)
> >>>>>>> Note: messages are are successfully received and begin
> >>>>>>> processing
> >>>>>>> (monitoring the brokers shows pending messages decreasing). Now
> >>>>>>> B2
> >>>>>>> has all the pending messages and B1 has 0.
> >>>>>>> 4. start consumer C1 (listing for messages from B1)
> >>>>>>> Note: no messages are received, which is another issue I have
> >>>>>>> since
> >>>>>>> B2 now has thousands of pending messages which C1 could help
> >>>>>>> process, but instead sits idle while C2 is forced to handle all
> >>>>>>> the
> >>>>>>> messages.
> >>>>>>> 5. stop consumer C2
> >>>>>>> Note: now I have thousands of messages sitting on B2 and 0 on B1
> >>>>>>> where a C1 is alive and ready to handle them.  So at this point,
> >>>>>>> despite having a consumer running, thousands of messages are
> >>>>>>> stuck
> >>>>>>> in the queue.
> >>>>>>> 6. stop consumer C1
> >>>>>>> Note: now I have no consumers.  Stopping and restarting C1 has
> >>>>>>> no
> >>>>>>> effect on the pending messages sitting on B1's queue.
> >>>>>>> 7. stop both brokers
> >>>>>>> 8. start B1, then start B2
> >>>>>>> 9. start C1
> >>>>>>> Note: now all messages have migrated from B2 to B1 and C1 is
> >>>>>>> again
> >>>>>>> processing messages.
> >>>>>>>
> >>>>>>> So after step 5, the only way to recover from the stuck messages
> >>>>>>> is to
> >>>>>>> restart the brokers.
> >>>>>>>
> >>>>>>> Below is my current connector config which I have on both
> >>>>>>> brokers.
> >>>>>>> I've tried playing with the various properties of the connector,
> >>>>>>> but
> >>>>>>> it seems as though no matter what I try the above scenario
> >>>>>>> continues
> >>>>>>> to occur.
> >>>>>>>
> >>>>>>> <networkConnector
> >>>>>>>  name="default-nc"
> >>>>>>>  uri="multicast://default?group=${broker.group}"
> >>>>>>>  dynamicOnly="true"
> >>>>>>>  networkTTL="25"
> >>>>>>>  suppressDuplicateQueueSubscriptions="true"/>
> >>>>>>>
> >>>>>>>
> >>>>>>> So, is this an activemq bug? Am I mis-using activemq? Is there
> >>>>>>> some
> >>>>>>> other way to achieve a highly available distributed queue?
> >>>>>>>
> >>>>>>> Any help in this regard is greatly appreciated.
> >>>>>>>
> >>>>>>> --
> >>>>>>> eric
> >>>>>>>
> >>>>>>>
> >>>>>
> >>>>> --
> >>>>> eric
> >>>>
> >>>> Rob Davies
> >>>> http://twitter.com/rajdavies
> >>>> I work here: http://fusesource.com
> >>>> My Blog: http://rajdavies.blogspot.com/
> >>>> I'm writing this: http://www.manning.com/snyder/
> >>>
> >>> --
> >>> eric
> >>
> >> Rob Davies
> >> http://twitter.com/rajdavies
> >> I work here: http://fusesource.com
> >> My Blog: http://rajdavies.blogspot.com/
> >> I'm writing this: http://www.manning.com/snyder/
> >>
> >>
> >>
> >>
> >>
> >
> > --
> > eric
>
> Rob Davies
> http://twitter.com/rajdavies
> I work here: http://fusesource.com
> My Blog: http://rajdavies.blogspot.com/
> I'm writing this: http://www.manning.com/snyder/
>
>
>
>
>

--
eric

Reply via email to