I am running some test cases regarding MQ TCP KeepAlive setting. My environment is MQ 6 server and MQ 7 JMS client. Please ignore the MQ 6 support issue. We purchased extended MQ product support from IBM.
My MQ server runs on Solaris, and my MQ client runs on Windows.
Here is my observation. As long as TCP KeepAlive is set to TRUE (yes) on the MQ server (qm.ini file), TCP request and response is exchanged between the client and server. It does not matter what is the setting on the MQ client (mqclient.ini file).
However, when the MQ JMS client sets TCP KeepAlive to TRUE, TCP KeepAlive is initiated by the MQ client. When the MQ JMS client sets TCP KeepAlive to FALSE, TCP KeepAlive is initiated by the MQ server. Either way, it will keep the MQ connection alive to avoid firewall or CSS to bring down idle connections.
I read some IBM support docs, which says I must set TCP KeepAlive for MQ client.
Here is a link of one of the IBM doc, www-01.ibm.com/support/docview.wss?uid=swg21190501.
Could you please share your experience? Please correct me if I am wrong.
Pinned topic TCP KeepAlive setting to avoid firewall or CSS killing idle MQ connections
Answered question This question has been answered.
Unanswered question This question has not been answered yet.
Updated on 2013-02-06T21:45:34Z at 2013-02-06T21:45:34Z by SystemAdmin
Re: TCP KeepAlive setting to avoid firewall or CSS killing idle MQ connections2013-01-29T10:54:58ZThis is the accepted answer. This is the accepted answer.In order for KeepAlive probes to flow across a socket, KeepAlive need only be set at one end. This will keep a socket open and stop a firewall from closing it due to inactivity.
In order for KeepAlive probes to detect the fact that the other end of the socket is no longer present, KeepAlive needs to be configured at the end that is still alive. Since you don't know in advance which end will be the one that disappears, this is why you might set KeepAlive on at both ends of the socket/channel.
FYI: In MQ V7.0 and above, MQ clients can now send heartbeats from the client and from the server, thus detecting the disappearance of the partner, and also keeping the socket alive. So the need to use KeepAlive is dramatically reduced in that version.