We are using JMS_MDB Listsner with IBM MQ Queues. can some one explain the how the messages in Queue get processed by Service JMS. At atime how many messages get picked from Queue by the listener and processed by Service JMS.
And is there a way to Configure the number of messages processed at a go.
As we had faced an issue when there are huge bunch of messages in the queue. we see some of the messages getting processed at same time (simultaneously) as a result we are facing Integrity constraint issue with DB as Primary key (which is generated in service activity considering time stamp) is generated same when inserting particular message into the DB table (which is done by Service JMS activity).
It is true that the max threads for MDB instances are application server specific, but for WAS, if you are using MQ as the message provider, there is a custom property called maxPoolDepth will do the trick. WorkManager is irrelevant here - it is configured by Pega to process all the async requests (batch/agent/async loading etc).
The maximum number of server sessions in the server session pool used by a connection consumer. When a server session is created, it starts a conversation with a queue manager. The connection consumer uses a server session to deliver a message to an MDB. A larger pool depth allows more messages to be delivered concurrently in high volume situations, but uses more resources of the application server. If many MDBs are to be deployed, consider making the pool depth smaller in order to maintain the load on the application server at a manageable level. Each connection consumer uses its own server session pool, so that this property does not define the total number of server sessions available to all connection consumers.