Perhaps a work-around would be to create a garbage-service. Ie. a services that pops off all messages not needed by the consumer to /dev/null? Though you probably don't know which messages are not needed by the subscriber since you don't know which subscribers you will have... Perhaps you could create an algorithm that does something like "if the consumer is up and the message is older than xxx time" pop it off?

On Mon, 1 Nov 2010 10:25:40 +0000, "Maciej Rakowicz" <[email protected]> wrote:
in case of selectorAware=true and consumer down, what happens to
those  messages? are they discarded? Is there anything sent to one of
the  advisories? I can't seem to find it anywhere.

On 1 Nov 2010, at 09:48, Maciej Rakowicz wrote:

I guess, only if we keep downtimes short enough so 'matched' messages don't expire and big enough maxPageSize or something to keep matched messages consumed.

Does anyone know if this (i.e. AMQ-3004) is going to be worked on in the near future?

m.

On 1 Nov 2010, at 09:32, Gary Tully wrote:

Message expiry may help in the short term, set a time to live on the
messages such that the built up unmatched messages expire and are
removed.

On 1 November 2010 09:20, Maciej Rakowicz <[email protected]> wrote:
All,

amq 5.4.0. jdk 1.6

Scenario:
broker persistence=true, selectorAware=false
Virtual Topic with say one queue. There is a consumer A connected to that queue with a selector. All works fine. Consumer A dies, messages pile up, consumer A starts back up, missed messages are redelivered. You can easily verify that queue receives all posted messages while consumer's down. Now, adding consumer B, since selectorAware=false and consumer B uses an exclusive selector messages sent to consumer A are not consumed by consumer B. All good save the fact that all unmatched messages end up polluting
consumer's B queue. All according to the documentation.
Flipping selectorAware to true solves one problem but introduces another (way more important in my setup). Unmatched messages won't pile up on consumer's B queue which is fine. However, if consumer A dies they are not sent to consumer's A queue (disappearing after reaching the topic - I dunno where they go) hence disabling any missed message delivery on consumer's A
startup.

I there any way around it? I really need to handle all missed messages with no exception. At the same time I cannot allow stacking up messages in each
and every queue although they are not matched.

Btw. I do not have a list of consumers in advance, the subscription is fully dynamic, although since broker runs persistence, once subscribed I do have
an idea of who's subscribed even if connection is currently down.

I would appreciate any hints.

mac



-- http://blog.garytully.com
http://fusesource.com


Reply via email to