I have a JMS server running on a clustered environment with Request and Response queues.
It accepts a request and puts into a queue. The requests from the queue are then send to one of the nodes for processing where my MDB(On each node) is there. The problem is when one request is heavy and the one just following is light. The heavy request takes a long time to process and the light request is forced to wait until the former is done. Is it possible in IBM Websphere v7.0 ND to send the request to different servers at a time(or maybe more) so that a single request does not hijack all the resources? If yes, do we need a configuration change or we need to write a custom component for that?...
I found some information regarding this. To achieve this first we need to cluster the JMS Server and then WAS or JMS Server will load balance the request. BUT BUT...if you are using IBM WMQ Server as you JMS Cluster then there is catch....which is that response will always going to be on local queue. Let me explain, let say you have WAS Cluster which have four servers,
1) Server1 and Server2 are for Application hosting [as web servers]
2) Server3 and Server4 are configured to access WMQ Cluster [as J2EE servers].
3) WMQ Cluster is exposing two queues to the outside world (let say it has two queue managers internally but we do not need to go in depth of WMQ cluster at this stage).
4) Now application hosted on Server2 has generated a message which will initially be placed into its local queue and then load balanced to the clustered queue, where it will be consumed by MDB, MDB will process the request and put message back on response queue and theoretically your application should consume this message (response) but it will not until it will be put back on Server2 local response queue. The work around for this limitation is to always set 'replyTo' property while generating message from your application and check this property within your MDB before posting a response.