This is one topic in a series of blog posts.
- The ups and downs of MQ Reconnect – the basics
- The ups and downs of MQ Reconnect – what do I need to do to get it to work?
- The ups and downs of MQ Reconnect – the classic MQ scenarios
- The ups and downs of MQ Reconnect – how can I tell if automatic reconnect has happened?
- The ups and downs of MQ Reconnect – little problems
- The ups and downs of MQ Reconnect – frustrating problems.
The MQ reconnection support make any reconnection transparent to the application code.
You can specify an MQ Call Back function, MQCB, and specify a routine which gets control asynchronously when events happen. See sample code amqsphac.c described here.
The specified call back function gets control whenever there is an event. You can then take actions such as print out information, for example
- switch…
- case MQRC_RECONNECTED:
- printf(“%sEVENT : Connection Reconnected\n”,TimeStamp);
- break;
You could extend this to set a flag in global storage, or write an event message to aid problem determination.
Running an application and issuing the endmqm -r QMA command, the exit produced
14:43:25 : EVENT : Connection Reconnecting (Delay: 1055ms) 14:43:26 : EVENT : Connection Reconnected
Which showed it connected to another queue manager after a short interval.
With only one queue manager active, and issuing endmqm -r QMA
the messages were
14:44:32 : EVENT : Connection Reconnecting (Delay: 1021ms) 14:44:34 : EVENT : Connection Reconnecting (Delay: 2122ms) 14:44:36 : EVENT : Connection Reconnecting (Delay: 4572ms) 14:44:40 : EVENT : Connection Reconnecting (Delay: 4819ms) 14:44:45 : EVENT : Connection Reconnecting (Delay: 4609ms) 14:44:50 : EVENT : Connection Reconnecting (Delay: 4262ms) 14:44:54 : EVENT : Connection Reconnecting (Delay: 4151ms) 14:44:58 : EVENT : Connection Reconnecting (Delay: 4035ms) 14:45:02 : EVENT : Connection Reconnecting (Delay: 4616ms) 14:45:02 : EVENT : Reconnection failed 14:45:02 : EVENT : Connection Broken
In the mqclient.ini file I had
CHANNELS: ServerConnectionParms=COLIN/TCP/127.0.0.1(1414),127.0.0.1(1416) MQReconnectTimeout=30 ReconDelay=(1000,200)(2000,200)(4000,1000)
The time between first detecting a problem, 14:44:32 and 14:45:02 : EVENT : Reconnection failed, was the time specified in MQReconnectTimeout=30 (seconds).
The reconnections were tried after the times in ReconDelay=(1000,200)(2000,200)(4000,1000).
For (1000,200) this says try connecting after 1000 ms + a random time in interval between 0 and 200 ms. The first interval was 1021 ms.
See here for more information.