| Paul Ilechko 2005-05-27, 5:57 pm |
| Mike wrote:
> We're still having a few problems here and I want to
> configure the server as solid as I can. I'm looking at
> the Servers->Application Servers->SERVER->Message Listener
> Service->Listener Ports: Maximum Messages.
>
> From the manual I understand the default is 1. The current
> setting is 2. Can anyone think of or expound in the
> dangers/concerns of setting this to 5 or 10? Not setting
> it to some huge number, 100 -> 1000.
>
> These listener ports pull messages from MQ queues for
> internal processing.
No, for MQ this is fixed at 1, changing it does nothing. To get greater
concurrency change Max Sessions, not Max Messages, and set
MaxConnections on the QCF to about double Max Sessions. Start with
around 5 to 10 sessions, and TEST to see what your environment can handle.
But note that to scale the performance of your MDBs and the WAS MDB
listener, simply increasing the number of maxSessions is not sufficient.
There is one queue reader thread per queue per JVM. So, you should clone
the application servers, resulting in multiple queue reader threads
working off the same queue.
To further improve performance, setup an MQ cluster so that the load is
distributed across multiple queues. Setup the MDB listener ports on
different clones to listen on QCFs corresponding to different queue
managers. This completely eliminates queue contention.
However, if for any reason your application requires strict message
sequencing, you can't do what is recommended here. You must then have
Max Sessions = 1, and you must not have multiple servers reading from
the same queue. The way you scale in this situation is to break up the
work on some natural boundary at the *sending application* - for example
write to different queues by account number range, or patient id range,
or however your business model breaks down logically - then you will be
sure that all messages for the same "entity" will remain in sequence.
Paul.
|