IBM MQ Examples(3.3)

In an IBM MQ collection agent workflow there are four different UDRs created and sent. This requires one ore more agents containing APL code (Analysis or Aggregation) to be part of the workflow.

Collect and Process IBM MQ Message

If "dynamic initialization" has been configured, a configRequest, including an empty MQConnectionInfo UDR, is sent to an Analysis agent at startup. The Analysis agent populates the UDR with configuration info and returns it to the IBM MQ Collection agent.

For each collected message, the IBM MQ collection agent sends an InputMessage including an MQMessage UDR to the Analysis agent. If "Auto Remove" has been configured, the message is removed from the queue and a remMessage is sent to the agent.


Realtime workflow example - a message is collected from the IBM MQ collection agent

Dynamic Initialization

The following APL code example shows how to use dynamic initialization.

consume { 
        if (instanceOf(input, mq.MQConnectionInfo)) { 
            mq.MQConnectionInfo info = (mq.MQConnectionInfo) input; 
            info.Host = "mymqhost"; 
            info.Port = 1415; 
            info.ChannelName = "CHANNEL2"; 
            info.QueueManager = "mgr2.queue.manager"; 
        
            list<string> queues = listCreate(string); 
            listAdd(queues,"Q1.QUEUE"); 
            listAdd(queues,"Q2.QUEUE"); 
      
            info.Queues = queues; 
            udrRoute(info); 
        } 
    }

Process the MQ Message

The following APL code example shows how to process the IBM MQ message and remove it from the queue.

consume {
        if (instanceOf(input, mq.MQMessage)) { 
            mq.MQMessage msg = (mq.MQMessage) input;
            //Process the MQ Message
            handleResponse(msg);
            //Remove the message from the queue
            udrRoute(msg, "remMessage");
        }
    }

Send Messages to the IBM MQ Queue Manager

In the following figure the workflow forwards a message to an IBM MQ queue manager.

Workflow example - a message is sent to a queue manager

The following APL code example shows how to send an IBM MQ message to a queue.

mq.MQQueue queue;
    initialize {
        mq.MQQueueManagerInfo conUDR = udrCreate(mq.MQQueueManagerInfo);
        conUDR.ChannelName = "CHANNEL1";
        conUDR.Host = "10.46.100.86";
        conUDR.Port = 1414;
        conUDR.QueueManager = "mgr1.queue.manager";
        queue = mqConnect(conUDR, "Q1.QUEUE"); 
    }
    
    consume {
        mqStatus(queue);
        debug("Queue Depth: "+queue.CurrentDepth); 
        debug("Queue Max Depth: "+queue.MaxDepth);
        mq.MQMessage msg = udrCreate(mq.MQMessage);
        msg.Message = input;
        mqPut(queue, msg);
    }
    
    deinitialize {
        mqClose(queue);
    }