Stuart Correct me if I'm wrong. Your server application (whose connection is not in question) is actively sitting on an MQGET waiting for work (as server applications do). Your client application is going through the firewall with a CLNTCONN/SVRCONN connection that is being broken. This client application has already connected and has opened/created a reply queue, but is doing no MQ work because it is waiting for an operator initiated transaction. Correct?
It doesn't sound like a Heartbeat issue, has heartbeat cannot help your idle CLNTCONN/SVRCONN connection for the reason Neil and Paul mention (specifically that it will only help while your client application is in a get with wait so that there is an active MQI call that can respond to the heartbeat). Doesn't sound like a bug to me. How do you fix this? I'm not sure. Maybe KeepAlive can help (I've never fully understood Keepalive), maybe changes to your design. Certainly the application should be prepared to deal with broken connections as Emile suggests, but keeping it from breaking or maintaining the connection through idle times may require additional tactics. Rick |---------+---------------------------------------> | | Neil Casey | | | <[EMAIL PROTECTED]> | | | | | | Sent by: MQSeries List | | | <[EMAIL PROTECTED]> | | | | | | | | | | | | Wednesday September 10, 2003 01:11 | | | AM | | | Please respond to MQSeries List | | | | |---------+---------------------------------------> >----------------------------------------------------------------------------------------------------| | | | To: [EMAIL PROTECTED] | | cc: | | Subject: Re: Heartbeat, Keepalive and Client Connection Timeouts | >----------------------------------------------------------------------------------------------------| It's a nice solution that only applies with Queue manager to Queue manager channels. You can't do this sort of thing with a server connection channel, because there is no queue manager at the other end (also no transmission queue etc etc). It also shouldn't be necessary to do this to keep a firewall open. Heartbeat should be able to achieve this. Unfortunately, you look like you are having problems with Client connections. I would have expected that you should be able to define the HBINT on the Client connection channel and the server connection channel. The manual says: For channels with a channel type (CHLTYPE) of SVRCONN or CLNTCONN, this is the time, in seconds, between heartbeat flows passed from the server MCA when that MCA has issued an MQGET with WAIT on behalf of a client application. This allows the server to handle situations where the client connection fails during an MQGET with WAIT. This type of heartbeat is valid only for AIX, Compaq OpenVMS, HP-UX, Linux, OS/2 Warp, OS/400, Solaris, and Windows. So you only get heartbeats when your application is in a MQGET with wait condition. This is exactly what you describe for your application, so it is possible that you are experiencing a bug (shock, horror), for which you would need to go to IBM for support. Regards, Neil Casey. |---------+----------------------------> | | [EMAIL PROTECTED]| | | .AU | | | Sent by: MQSeries| | | List | | | <[EMAIL PROTECTED]| | | n.AC.AT> | | | | | | | | | 10/09/2003 13:24 | | | Please respond to| | | MQSeries List | | | | |---------+----------------------------> > --------------------------------------------------------------------------------------------------------------| | | | To: [EMAIL PROTECTED] | | cc: | | Subject: Re: Heartbeat, Keepalive and Client Connection Timeouts | > --------------------------------------------------------------------------------------------------------------| Nice solution. Sid -----Original Message----- From: McCarty, Brian [mailto:[EMAIL PROTECTED] Sent: Wednesday, 10 September 2003 12:24 PM To: [EMAIL PROTECTED] Subject: Re: Heartbeat, Keepalive and Client Connection Timeouts Is there a reply q back to your local queue manager? If so, just create a remote q definition on your server that points to a queue on the remote server that does not actually exist. Make the message a request message with the discard option set asking for a report message. The report message will keep their/sender - your/receiver running. If that's not needed, just take off the report message option. In Java it would look like this: message = new MQMessage(); pmo.options = MQC.MQPMO_FAIL_IF_QUIESCING | MQC.MQPER_NOT_PERSISTENT; byte b[] = new byte[24]; Random r = new Random(); r.nextBytes(b); message.correlationId = (b); message.expiry = 5; message.report = MQC.MQRO_EXCEPTION_WITH_FULL_DATA | MQC.MQRO_PASS_MSG_ID | MQC.MQRO_PASS_CORREL_ID | MQC.MQRO_DISCARD_MSG; message.replyToQueueManagerName = "SOME_OTHER_QUEUE_MANAGER"; message.replyToQueueName = "SOME_OTHER_QUEUE"; message.messageType = MQC.MQMT_REQUEST; try { request_queue.put(message, pmo); } If you want to route the report message elsewhere, just set the replyToQueue* fields also. B -----Original Message----- From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] Sent: Tuesday, September 09, 2003 9:00 PM To: [EMAIL PROTECTED] Subject: Re: Heartbeat, Keepalive and Cleint Connection Timeouts Pump data to another queue and have a process to drop it somewhere. Sid -----Original Message----- From: Stuart Bourne [mailto:[EMAIL PROTECTED] Sent: Wednesday, 10 September 2003 11:53 AM To: [EMAIL PROTECTED] Subject: Heartbeat, Keepalive and Cleint Connection Timeouts Hello all, I am running MQ 5.3 on HP-UX 11i. A VB/MQ client front end on NT communicates with the qmgr via a Server Connection channel to a permanent local queue while replies to the client are via temporary dynamic queues. A process on the server sits and waits for a message with an MQGET after establishing a connection to the qmgr and opening the local queue. The client process establishes a connection to the qmgr, opens a dynamic reply queue and will then sit and wait for the operator to initiate a transaction. At this point there is no application generated traffic between client and server. The HBINT on the channel is defaulted to 300 and I have included the TCP:, KeepAlive=Yes section in the qmgr's qm.ini file. There is a firewall between the client and the server and this firewall has a one hour timeout on idle connections. Client connections are being killed by the firewall after this one hour timeout period. I do not want these sessions to be killed and thought that the HBINT and KeepAlive settings would generate traffic between client and server that would prevent the connections being deemed idle by the firewall. The comms people have put a trace on traffic between client and server and tell me that there is none. Obviously my understanding of HBINT and KeepAlive is incorrect. Can anyone first of all tell me how I can prevent my idle connections being terminated by the firewall and secondly explain exactly what HBINT and KeepAlive parameters achieve. Thanks in advance. MQ newbie. Stuart Bourne. Hansen Technologies. Australia. Instructions for managing your mailing list subscription are provided in the Listserv General Users Guide available at http://www.lsoft.com Archive: http://vm.akh-wien.ac.at/MQSeries.archive Instructions for managing your mailing list subscription are provided in the Listserv General Users Guide available at http://www.lsoft.com Archive: http://vm.akh-wien.ac.at/MQSeries.archive Instructions for managing your mailing list subscription are provided in the Listserv General Users Guide available at http://www.lsoft.com Archive: http://vm.akh-wien.ac.at/MQSeries.archive Instructions for managing your mailing list subscription are provided in the Listserv General Users Guide available at http://www.lsoft.com Archive: http://vm.akh-wien.ac.at/MQSeries.archive Instructions for managing your mailing list subscription are provided in the Listserv General Users Guide available at http://www.lsoft.com Archive: http://vm.akh-wien.ac.at/MQSeries.archive Instructions for managing your mailing list subscription are provided in the Listserv General Users Guide available at http://www.lsoft.com Archive: http://vm.akh-wien.ac.at/MQSeries.archive