Hi there,

as an ActiveMQ starter I would like you to give me some feedback on my
setup.

Scenario is:
- currently single broker setup with standalone ActiveMQ 5.8 using LevelDB,
JRE 7, Protocol for all connected systems will be OpenWire
- 2 backend systems, let's call them B1 and B2, acting as producer and
consumer in sequential, non-multithreaded working mode
- B1 and B2 do produce different kinds of messages into their own individual
queue (two 'in'-queues from the client perspective)
- these systems can rely on a stable network connection and can be seen as a
fast producer and consumer running all over the day
- on the other side we do have a client application C with up to 250
instances working in parallel as a consumer on the two before mentioned
out-queues
- each client C does produce different kinds of response messages to
different 'out'-queues
- the clients do not have a stable network connection and messages can be
stuck in the queue for a while resulting in large out queues, at least quite
a bundle of messages for some of the consumers can remain for a longer time
- expected data volume: 50.000 messages a day, average size 10kb (range is
from 1kb to 1MB) 
- all messages must be persisted
- all queues and virtual destinations are predefined in activemq.xml

Message processing:
- B1 produces into QIB1 (in-queue for B1) and consumes from QO1, QO2, QO3
(queues-out 1 to 3), spread all over the day 
- B2 usually produces large amounts of messages only once a day into QIB2,
but consumes continiously returning messages from QO4
- every client C consumes request messages designated to that individual
client through JMSXGroupID from QIB1 and QIB2 and produces response messages
to QO1,2,3,4  
- in the opposite direction B1 and B2 are able to process messages for
theirselves delivered to their designated queues
- message order is relevant in both directions (in and out) 
- for testing purposes und to be able to redeliver messages to clients in
case of loss at client side we have defined "Composite Destinations", so
that each message is copied (forwardOnly="false") into an in- respectively
out-archive queue, so that messages can be pushed back into the relevant
queues (we are a little concerned about the quality of implementation on the
client side and finding bugs processing messages in production and like to
be prepared for such cases, archiving will be deactivated later)

1. Is that a suitable setup to use ActiveMQ in production?

2. Is a composite destination from queue to queue okay? In the documentation
often topics are used, from the archive queues will never be consumed - only
copied, deleted or purged and viewed in the queue browser.

3. Is it possible to add an expiry date while forwarding to the archive
queue/topic (Apache Camel is not in use)?

4. One open question is whether to use a single out queue (easier for client
app C) and to use filtered destinations, filtering must then base on a
application specific message property to distribute the message types to the
different out-queues, is that possible? Does it perhaps perform better, on
client and server side?

5. I still have to take a deeper look at the memory settings. The queues do
have quite different characteristics, from being constantly emptied (out
queues) to holding large amounts of messages for lots of clients for some
time being able to deliver at any time (in queues). I guess at least
regarding to both out queues containing messages for up to 250 different
message groups I have to do some finetuning? 

6. What are the side effects of too little memory for queue? Out-queues are
not time or performance critical and B1 and B2 should grab all messages
regardless of the message group, in-queues must deliver fast to the client
according to the requested message group. 

I found a note: "like message selector matching, grouping based on
JMSXGroupID occurs before dispatch on messages in memory. With the default
maxPageSize setting, large backlogs of messages destined for one group they
can block receipt of messages to other groups if they don't all fit in
memory." 

That means if memory is not enough for all(!) groups/messages in the
in-queue, a client possibly receives only a subset of messages for his
message group?

Thanks for any hints and advice,
Tom



--
View this message in context: 
http://activemq.2283324.n4.nabble.com/Questions-to-broker-architecture-and-setup-memory-configuration-tp4679749.html
Sent from the ActiveMQ - User mailing list archive at Nabble.com.

Reply via email to