Create queue managers on Multiplatforms

Before we can use messages and queues, create and start at least one queue manager and its associated objects. A queue manager manages the resources associated with it, in particular the queues that it owns. It provides queuing services to applications for Message queuing Interface (MQI) calls and commands to create, modify, display, and delete IBM MQ objects.


Before starting

Important: IBM MQ does not support machine names that contain spaces. If we install IBM MQ on a computer with a machine name that contains spaces, we cannot create any queue managers. Before we can create a queue manager, there are several points that we must consider, especially in a production environment. Work through the following checklist:

    The installation associated with the queue manager
    To create a queue manager, we use the IBM MQ control command crtmqm. The crtmqm command automatically associates a queue manager with the installation from which the crtmqm command was issued. For commands that operate on a queue manager, we must issue the command from the installation associated with the queue manager. We can change the associated installation of a queue manager using the setmqm command. Note that the Windows installer does not add the user that performs the installation to the mqm group, for more details, see Authority to administer IBM MQ on UNIX, Linux, and Windows.

    Naming conventions
    Use uppercase names so that we can communicate with queue managers on all platforms. Remember that names are assigned exactly as you enter them. To avoid the inconvenience of lots of typing, do not use unnecessarily long names.

    Specify a unique queue manager name
    When you create a queue manager, ensure that no other queue manager has the same name anywhere in your network. Queue manager names are not checked when the queue manager is created, and names that are not unique prevent you from creating channels for distributed queuing. Also, if we use the network for publish/subscribe messaging, subscriptions are associated with the queue manager name that created them. Therefore if queue managers in the cluster or hierarchy have the same name, it can result in publications not reaching them.

    One way of ensuring uniqueness is to prefix each queue manager name with its own unique node name. For example, if a node is called ACCOUNTS, we can name your queue manager ACCOUNTS.SATURN.QUEUE.MANAGER, where SATURN identifies a particular queue manager and QUEUE.MANAGER is an extension we can give to all queue managers. Alternatively, we can omit this, but note that ACCOUNTS.SATURN and ACCOUNTS.SATURN.QUEUE.MANAGER are different queue manager names.

    If we are using IBM MQ for communication with other enterprises, we can also include your own enterprise name as a prefix. This is not shown in the examples, because it makes them more difficult to follow.

    Note: Queue manager names in control commands are case-sensitive. This means that we are allowed to create two queue managers with the names jupiter.queue.manager and JUPITER.queue.manager. However, it is better to avoid such complications.

    Limit the number of queue managers
    We can create as many queue managers as resources allow. However, because each queue manager requires its own resources, it is generally better to have one queue manager with 100 queues on a node than to have ten queue managers with ten queues each.

    In production systems, many processors can be exploited with a single queue manager, but larger server machines might run more effectively with multiple queue managers.

    Specify a default queue manager
    Each node should have a default queue manager, though it is possible to configure IBM MQ on a node without one. The default queue manager is the queue manager that applications connect to if they do not specify a queue manager name in an MQCONN call. It is also the queue manager that processes MQSC commands when invoking the runmqsc command without specifying a queue manager name.

    Specifying a queue manager as the default replaces any existing default queue manager specification for the node.

    Change the default queue manage can affect other users or applications. The change has no effect on currently-connected applications, because they can use the handle from their original connect call in any further MQI calls. This handle ensures that the calls are directed to the same queue manager. Any applications connecting after you have changed the default queue manager connect to the new default queue manager. This might be what you intend, but we should take this into account before changing the default.

    Specify a dead-letter queue
    The dead-letter queue is a local queue where messages are put if they cannot be routed to their intended destination.

    It is important to have a dead-letter queue on each queue manager in your network. If we do not define one, errors in application programs might cause channels to be closed, and replies to administration commands might not be received.

    For example, if an application tries to put a message on a queue on another queue manager, but gives the wrong queue name, the channel is stopped and the message remains on the transmission queue. Other applications cannot then use this channel for their messages.

    The channels are not affected if the queue managers have dead-letter queues. The undelivered message is put on the dead-letter queue at the receiving end, leaving the channel and its transmission queue available.

    When creating a queue manager, use the -u flag to specify the name of the dead-letter queue. We can also use an MQSC command to ALTER the attributes of a queue manager that we have already defined to specify the dead-letter queue to be used.

    Specify a default transmission queue
    A transmission queue is a local queue on which messages in transit to a remote queue manager are queued before transmission. The default transmission queue is the queue used when no transmission queue is explicitly defined. Each queue manager can be assigned a default transmission queue.

    When you create a queue manager, use the -d flag to specify the name of the default transmission queue. This does not actually create the queue; you have to do this explicitly later on.

    Specify logging parameters
    We can specify logging parameters on the crtmqm command, including the type of logging, and the path and size of the log files. In a development environment, the default logging parameters should be adequate. However, we can change the defaults if, for example:

    • We have a low-end system configuration that cannot support large logs.
    • You anticipate a large number of long messages being on your queues at the same time.
    • You anticipate a lot of persistent messages passing through the queue manager.

    Once you have set the logging parameters, some of them can only be changed by deleting the queue manager and recreating it with the same name but with different logging parameters.

    For more information about logging parameters, see Configure high availability, recovery and restart.

    For IBM MQ for UNIX systems only
    We can create the queue manager directory /var/mqm/qmgrs/qmgr, even on a separate local file system, before we use the crtmqm command. When you use crtmqm, if the /var/mqm/qmgrs/qmgr directory exists, is empty, and is owned by mqm, it is used for the queue manager data. If the directory is not owned by mqm, the creation fails with a First Failure Support Technology ( FFST ) message. If the directory is not empty, a new directory is created.


About this task

To create a queue manager, we use the IBM MQ control command (crtmqm). The crtmqm command automatically creates the required default objects and system objects. Default objects form the basis of any object definitions that you make; system objects are required for queue manager operation.

On Windows systems you have the option to start multiple instances of the queue manager by using the sax option of the crtmqm command.

When you have created a queue manager and its objects, we can use the strmqm command to start the queue manager.

Parent topic: Configure IBM MQ


Related tasks


Related information