Here's some information on dispatch policies:
http://activemq.apache.org/dispatch-policies.html

The default is round robin for queues but you can also set priorities.

On Sun, Sep 13, 2015 at 5:42 PM, Kevin Burton <bur...@spinn3r.com> wrote:

> It seems to be fixated to the first consumer that had a message?  I think
> ideally it would be first come first serve.
>
> Setting prefetch=0 doesn’t seem to have any impact.  I *kind* of think this
> is why the redelivery is set on the client but I might be wrong.
>
> It seems weird to me to set the redelivery policy on the client.  This
> seems something that could/should be enforced on the server.
>
> Of course if you control all the clients its about the same thing.
>
> It’s completely possible to have an unbalanced cluster.  This is why
> queueing theory rocks.  Because this way if the original consumer that
> first processed the message (and failed) is now overloaded, another, less
> busy one can come in and handle it.
>
> I might do some more testing to just verify my theory.  Maybe use a set of
> headers detailing which consumers are processing the messages.
>
> Would love to to be proven wrong here.
>
> On Sun, Sep 13, 2015 at 8:22 AM, Tim Bain <tb...@alumni.duke.edu> wrote:
>
> > I believe that setting prefetch=0 only changes how that message gets
> > dispatched to the first consumer (pull vs. push); once it's there, I
> > wouldn't expect the broker's behavior w.r.t. that dispatched message to
> > change (and indeed you say it didn't).  But as you say, closing the
> > connection returns all dispatched messages to the broker so they can be
> > dispatched to another consumer.
> >
> > I haven't looked at the redelivery code, but I wonder if the logic is
> > actually to round-robin between the consumers rather than to redeliver
> them
> > all to the consumer that had them, in which case it might be hard to tell
> > what the behavior is when you're only publishing one message.  If you set
> > prefetch=4 and publish four messages instead of one with two connected
> > consumers (so your first consumer gets two of them initially), do you get
> > both messages redelivered to the first consumer or only one?
> >
> > Tim
> > On Sep 12, 2015 11:21 AM, "Kevin Burton" <bur...@spinn3r.com> wrote:
> >
> > > AH !  Good point about the prefetch policy.  That always confusing
> > because
> > > it’s a way for messages to kind of be delivered but hidden.
> > >
> > > Anyway.  Setting prefetch to zero doesn’t resolve it.. But closing the
> > > second connection DOES…
> > >
> > > So I think this is how it works.. which I couldn’t find documented
> > anywhere
> > > (but I’m sure I’m missing it )
> > >
> > > - Prefetch is an issue because you shouldn’t assume it’s going to be
> sent
> > > to a specific connection unless prefetch is 0…
> > >
> > > - The redelivered message is always sent back to the consumer that
> > > originally consumed the message , if it’s still open.  I wonder if this
> > is
> > > done for performance reasons.  The only way this is not the case is if
> > that
> > > consumer goes away … then it’s redelivered to another host.
> > >
> > >
> > > On Sat, Sep 12, 2015 at 9:49 AM, Christopher Shannon <
> > > christopher.l.shan...@gmail.com> wrote:
> > >
> > > > Your problem is you are always creating a new consumer in your
> > consume()
> > > > method but never closing it.  So the consumer is sticking around and
> > > > hanging onto messages in prefetch.  You either need to reuse your
> > message
> > > > consumer (call receive() on the same open consumer after rollback
> > because
> > > > it's getting the message again in prefetch) or close it and use a
> > > different
> > > > consumer.  You might also be able to set prefetch to 0 to get it to
> > work.
> > > >
> > > > I took your code and modified it both ways to show each strategy:
> > > >
> > > > https://gist.github.com/cshannon/45d573fabeba733c6bb6
> > > > https://gist.github.com/cshannon/64b8f790f9b57269ae45
> > > >
> > > > On Fri, Sep 11, 2015 at 7:14 PM, Kevin Burton <bur...@spinn3r.com>
> > > wrote:
> > > >
> > > > > OK.
> > > > >
> > > > > For the life of me I can’t get this to work.
> > > > >
> > > > > https://gist.github.com/burtonator/eb7a70e1750080ca621e
> > > > >
> > > > > Basically I want to call rollback() so that a message is retries
> > later.
> > > > > This way if there’s a transient but like a database connection
> > failing
> > > it
> > > > > gets retried (but of course uses the retry policy).
> > > > >
> > > > > The problem is that it just doesn’t work.
> > > > >
> > > > > I tried creating too ‘clients’ whereby each has its own client ID.
> > > That
> > > > > doesn’t work either.
> > > > >
> > > > > I went through the tests in ActiveMQ and didn’t see anything
> obvious
> > > > > there.  I must be missing something super obvious….
> > > > >
> > > > > Any thoughts?
> > > > >
> > > > > --
> > > > >
> > > > > Founder/CEO Spinn3r.com
> > > > > Location: *San Francisco, CA*
> > > > > blog: http://burtonator.wordpress.com
> > > > > … or check out my Google+ profile
> > > > > <https://plus.google.com/102718274791889610666/posts>
> > > > >
> > > >
> > >
> > >
> > >
> > > --
> > >
> > > Founder/CEO Spinn3r.com
> > > Location: *San Francisco, CA*
> > > blog: http://burtonator.wordpress.com
> > > … or check out my Google+ profile
> > > <https://plus.google.com/102718274791889610666/posts>
> > >
> >
>
>
>
> --
>
> Founder/CEO Spinn3r.com
> Location: *San Francisco, CA*
> blog: http://burtonator.wordpress.com
> … or check out my Google+ profile
> <https://plus.google.com/102718274791889610666/posts>
>

Reply via email to