Justin Bertram wrote:
 
>  I think the first thing to remember here is that the functionality you're
>  using is underpinned by wildcard *routing* [1] which is similar, but not
>  equivalent, to wildcard consuming.

Right, now that you mention it the documentation about wildcard routing
specifically points out that this is a feature targeting JMS topics.

I think what throws me off track, still, even after all these years
using Artemis is that Artemis uses the phrase *queue* for an architectural
concept that implements both JMS Queues, i.e anycast, and JMS Topics, i.e
multicast.

And as a side note, the documentation sometimes use the word "queue" without
qualify if it refers to the Artemis architectural concept of a queue or an
JMS queue. And the example for wildcard routing uses the adress names
"queue.news.#", "queue.news.europe", etc.

Or, is it just me? Do Artemis users generally prefix their JMS topic
addresses "queue." simply because Artemis internally handles it in an
Artemis multicast queue? :)

>  The behavior you're observing is expected given the semantics of wildcard
>  routing. As you suspect, the consumer is receiving a copy of the message.

Right, thanks for the confirmation!

>  The purposes you outlined make sense, generally speaking. However, the
>  devil is in the details. For example, how will the destinations be
>  "modified at runtime"?

The system has an api for runtime modification of endpoints. When new
messages are created all targeted endpoint's queue address names are
retrieved from that api.

> Also, by funnelling all messages through a single consumer are you not
> essentially reintroducing a "head of line blocking between unrelated
> target endpoints" problem?

Sorry, I was unclear. When I wrote single consumer I meant a single
implementation, not a single threaded message consumer instance.
There will be a message listener backed by a thread pool.

Normally there will also be an even inflow of messages per endpoint,
which I expect will result in a roughly evenly distribution of
target endpoints processed by the pool of shared consumers. Obviously
we have to consider misbehaving or slow consumers/endpoints, etc.

>  Have you considered creating an individual consumer for each destination
>  and either using management notifications or polling the management API to
>  find out about new queues?

Yes, but I was hoping avoid that. :)

Since the endpoint api is part of the system, we could add or remove
dedicated message listeners per queue on demand when the endpoint
inventory is modified.

The point of sharing a joint consumer/listener pool for multiple queues
and endpoints is to simplify resource management. In the ideal case it
scales down to a single consumer thread processing all messages
for all endpoints. It also allows us to control resource requirements
in worst case scenarios by setting the max size of the listener pool.

Thanks!
-- 
Fredrik Jonson


---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscr...@activemq.apache.org
For additional commands, e-mail: users-h...@activemq.apache.org
For further information, visit: https://activemq.apache.org/contact


Reply via email to