Websphere MQ Basics Tutorial

MQ-Basic-Setup-1

 

Below we will try to understand the basic behaviour of MQ objects and their behaviour for message exchange.

Let's assume, we have a requirement where,

"A java based application is generating few messages and those messages are to be consumed by C based application."

 

To fulfill the above requirement, we need to setup below component from MQ End.

1. Queue Manager

2. Local Queue

3. A message putting application(put functionality)

4. A message consuming application(get functionality)

 

Assumptions:

1. We have installed the MQ software on Windows/Linux platform. Please follow MQ Installation for setting up the environment.

2. We have also logged in as MQ administrator, so we don't need any further permission at queue & queue manager level. To understand more about permissions click MQ Authorizations.

 

Let's understand basic components of MQ Setup, 

Queue Manager:

Queue Manager is an MQ object.

This is the first and foremost component to be created after MQ installation. It manages the MQ objects and their behaviour.

It also supports applications, which are trying to put and get the messages.

 

 

Local Queue:

Local queue can be created after the queue manager is brought into running state. 

Local queue holds the application messages till the receiving end program consumes them. We will understand more about it in further sections.

 

Put Application:

Put Application is a program which puts the message into a queue. This could be written in any programming language or a proprietary application.

Here, we are using MQ Explorer for putting the messages into the queue. MQ explorer is a Java based application developed on eclipse platform. It has the wide range options for administering and working with the MQ objects.

 

Note: 

Instead of MQ explorer, we can also use "amqsput" c program for putting the messages into the queue. This is installed by default with MQ software installation.

 

Get Application:

Get Application is an Application which consumes the messages from a Queue.

Here, we are referring to "amqsget" application which is provided by IBM by default with MQ installation. It is developed in C language.

 

Steps to create Application-QueueManager-Application setup:

Note: 

Here we mostly focus on command line options and we will try to avoid graphical tools while working with MQ objects.

 

Step:1
Create a queue manager conforming to organization naming standards. For more on naming standards refer to, what are naming standards?

crtmqm DKLHYQM001

 

Step:2  
After creating a queue manager, check its status using, 

dspmq -m DKLHYQM001
QMNAME(DKLHYQM001)
STATUS(Ended immediately)

 

Step:3
To bring a queue manager into starting mode. We can't work with MQ if queue manager is not in running state. So, to start a queue manager

strmqm DKLHYQM001

 

Step:4 
Check the queue manager status again. This is to make sure that queue manager is actually in running state.

dspmq-m DKLHYQM001

QMNAME(DKLHYQM001)
STATUS(Running)

 

With the above setup, we have finished the setup of the first component which is queue manager.

 

Step:5 
Now to work with local queue creation,

we have to get into MQSC (MQ Scripting) mode of the queue manager.

runmqsc DKLHYQM001
5724-H72 (C) Copyright IBM Corp. 1994, 2009. ALL RIGHTS RESERVED.
Starting MQSC for queue manager DKLHYQM001..

 

Step:6
To define a local queue with default attributes,

DEFINE QLOCAL(KL.JAP1.MAP1.REQ1)

1 : DEFINE QLOCAL(KL.JAP1.MAP1.REQ1)
AMQ8006: WebSphere MQ queue created.

 

Step:7
To check whether queue is created or not and its properties, use "Display" command in runmqsc of queue manager.

DISPLAY QLOCAL(KL.JAP1.MAP1.REQ1)

 

The above command displays every property of Websphere MQ local queue. We will be discussing most of these things at different sections of issues.

 

Step:8 
Right now, we want to focus only on, 2 of the queue properties. 

Curdepth ---> This will display the number of messages currently available in that particular local queue. This value is dynamic and can't be altered.

MaxDepth---> This property will give the maximum number of messages that can be stored in the queue. This value is static and can be changed.

DISPLAY QLOCAL(KL.JAP1.MAP1.REQ1) CURDEPTH MAXDEPTH

 

2 : DISPLAY QLOCAL(KL.JAP1.MAP1.REQ1) CURDEPTH MAXDEPTH
AMQ8409: Display Queue details.
QUEUE(KL.JAP1.MAP1.REQ1)
CURDEPTH(0)
TYPE(QLOCAL)
MAXDEPTH(5000)

 

Note: 

 There are no messages and by default max depth of any queue is 5000.

 

To test above setup follow below steps:

We assume that one had already gone through the "basic MQ setup" and trying to test its functionality.

As you know that we have taken MQ explorer (Java Based Application) for putting the messages into WebSphere MQ queue. MQ Explorer is available for installation on Windows & Linux Platforms only. It's not there on other flavors of UNIX OS.

 

Note: 

We can also use "amqsput" sample program provided by IBM for putting messages into the queue.

 

Step :1
Open MQ Explorer as an Administrator

Go to,
All Apps(All programs) --> IBM WebSphere MQ --> MQ Explorer -->Right click on it --> choose "Run As Administrator"

We can see MQ Explorer is launched.

Now, go to IBM WebSphere MQ --> Queue Managers --> click on "Queues"

We can see the list of queue already created within that queue manager.

 

MQ-Setup-2

 

Step 2:
Right click on Queue name and click on "Put Test Message"

 

MQ-Setup-3

 

Type a message and click on "Put message" button and message is now pushed to a local queue. It's that simple.

 

MQ-Setup-4

 

We can observe current depth increased to "1", indicating that one message is available in the queue.

 

MQ-Setup-5

 

We can put any number of messages into the queue and once it is done then click on the "close" button.

For the test, we have placed 3 messages in the queue. We can see that current queue depth is raised to "3".

 

MQ-Setup-6

 

Step:3
To get the messages from a Queue with C based Application(amqsget).

amqsget KL.JAP1.MAP1.REQ1 DKLHYQM001

Sample AMQSGET0 start
message < WELCOME TO KNOBLAB >
message < 24900342506712358974368548948 >
message <*%@!@)$%&*($#@!&%*^@%(!%*&# >
no more messages
sample AMQSGET0 end

 

Step:4
To check curdepth of a Queue after getting Messages from a Queue

DISPLAY QLOCAL(KL.JAP1.MAP1.REQ1) CURDEPTH

1 : DISPLAY QLOCAL(KL.JAP1.MAP1.REQ1) CURDEPTH
AMQ8409: Display Queue details.
QUEUE(KL.JAP1.MAP1.REQ1) TYPE(QLOCAL)
CURDEPTH(0)

 

We can conclude that a java application and C application are able to exchange information with the help of MQ.