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

Reply via email to