Hi Folks !
We are doing SV for an internet banking application. When publishing the Response message into Application response queue we face this challenge.
Message Format : Cobol fixed length message
Protocol : Copybook data protocol over MQ.
W/O SV :
Application Server -> App Request Queue(targeted to Live Q) -> Live Request Queue -> Backed System -> Live Response Queue -> App Response Queue -> Application.
Queue setup :
App Request Queue(targeted to Live Q) - in Server A, Queue Manager A
Live Request Queue - Cluster Q in Server B, Queue Manager B
Live Response Queue - Cluster Q in Server B, Queue Manager B
App Response Queue - in Server A, Queue Manager A
With SV :
Application Server -> App Request Queue(targeted to Live Q) -> LISA Request Queue -> Take response -> LISA Response Queue -> App Response Queue -> Application
LISA Request Queue - Cluster Q in Server A, Queue Manager A
LISA Response Queue - Cluster Q in Server A, Queue Manager A
In Brief :
The copybook and message are mapping perfectly. They are in line with the interfacing field specification documents. When verifying with the LIVE request response messages, they are matching exactly with them. The challenge is to make the response reach front end application. We are experiencing MQ2033 error(Message not available in Queue) in the application server logs.
What can be the reason and how to justify this ?
A. Connectivity is not established
B. Message Structure is wrong. So the queue is not picking up the message.
Appreciate expert advise and justification.
Can revert with any details required.
MQ 2033 (MQRC_NO_MSG_AVAILABLE) means your application timed out while waiting for a response. There is usually one of three reasons for this:
1. The application is using a correlation scheme but the response was sent without the correct correlation ID.
2. There is another listener on the response queue, and it's dequeueing the response before it gets to the application.
3. The response is being sent to the wrong queue.
When you throw MQ clustering in the mix then you add a whole new layer of potential problems to (3). If the response queue is clustered among multiple Queue Managers, then how do you make sure the response goes to Queue Manager A and not some other Queue Manager?
I would make sure it's not (1) or (2), as those are easy to check. After that you may have to start experimenting with test message to see what gets to your application's listener and what doesn't.