IBM MQ and MQ Appliance News – February 2024

On Thursday February 29th, IBM Hursley released the next in the series of Continuous Delivery releases for IBM MQ V9.3 and the MQ Appliance, IBM MQ V9.3.5.

Downloading IBM MQ Version 9.3.5

Links of interest:-


We’ll collect up any other links about the new release as we find them and put them all here.

IBM MQ and MQ Appliance News – October 2023

On Thursday October 18th, IBM Hursley released the next in the series of Continuous Delivery releases for IBM MQ V9.3 and the MQ Appliance, IBM MQ V9.3.4.

Downloading IBM MQ Version 9.3.4

Links of interest:-


We’ll collect up any other links about the new release as we find them and put them all here.

Responding QMgr from CMDSCOPE(*) command

When you issue a CMDSCOPE(*) command to your Queue Sharing Group (QSG), responses will be returned from each member queue manager. The MQSC output looks something like the following (some spaces removed for brevity). You get a header and footer to tell you what happened with your command (shown in the red boxes), and a set of responses (in this case just 2 queues from each) from each of the member queue managers (shown in the green boxes).

=set formatting(off) distotals(off)
[17:58:57] DISPLAY QLOCAL(Q*) CMDSCOPE(*) CURDEPTH
CSQN205I COUNT= 2, RETURN=00000000, REASON=00000004 CSQN137I +CSQ1 'DISPLAY QLOCAL' command accepted for CMDSCOPE(*), sent to 3
CSQN205I COUNT= 5, RETURN=00000000, REASON=00000000 CSQN121I +CSQ1 'DISPLAY QLOCAL' command responses from CSQ1 CSQM401I +CSQ1 QUEUE(Q1 ) TYPE(QLOCAL ) QSGDISP(QMGR ) CURDEPTH( 5) CSQM401I +CSQ1 QUEUE(Q2 ) TYPE(QLOCAL ) QSGDISP(QMGR ) CURDEPTH( 0) CSQ9022I +CSQ1 CSQMDRTS ' DISPLAY QLOCAL' NORMAL COMPLETION
CSQN205I COUNT= 5, RETURN=00000000, REASON=00000000 CSQN121I +CSQ2 'DISPLAY QLOCAL' command responses from CSQ2 CSQM401I +CSQ2 QUEUE(Q1 ) TYPE(QLOCAL ) QSGDISP(QMGR ) CURDEPTH( 27) CSQM401I +CSQ2 QUEUE(Q2 ) TYPE(QLOCAL ) QSGDISP(QMGR ) CURDEPTH( 3) CSQ9022I +CSQ2 CSQMDRTS ' DISPLAY QLOCAL' NORMAL COMPLETION
CSQN205I COUNT= 5, RETURN=00000000, REASON=00000000 CSQN121I +CSQ3 'DISPLAY QLOCAL' command responses from CSQ3 CSQM401I +CSQ3 QUEUE(Q1 ) TYPE(QLOCAL ) QSGDISP(QMGR ) CURDEPTH( 1) CSQM401I +CSQ3 QUEUE(Q2 ) TYPE(QLOCAL ) QSGDISP(QMGR ) CURDEPTH( 0) CSQ9022I +CSQ3 CSQMDRTS ' DISPLAY QLOCAL' NORMAL COMPLETION
CSQN205I COUNT= 2, RETURN=00000000, REASON=00000000 CSQN122I +CSQ1 'DISPLAY QLOCAL' command for CMDSCOPE(*) normal completion

We were implementing the new sorting feature in MQSCX, and it became quite apparent that the MQSC responses did not hold all the important information. Looking at the output above, it is clear that the responding queue manager name is not part of the queue object response but rather it is part of the surrounding messages. When the responses from multiple queue managers from a Queue Sharing Group (QSG) were sorted we would lose the information about which queue manager it came from.

Message CSQM401I shows a Queue Manager name?

“I can see your queue manager name in the queue details message, CSQM401I, why can’t you use that?”

CSQM401I +CSQ2 QUEUE(Q1) TYPE(QLOCAL) QSGDISP(QMGR) CURDEPTH(27)

The text “+CSQ2” that you can see in the above message is not actually the queue manager name, but in fact the queue manager’s command prefix. This is the string you type prefixing a command in SDSF to ensure the command is sent to the correct sub-system. Often, by convention, it is a string that contains the queue manager name, usually prefixed with some punctuation character, but it is not always so. I have used command prefixes that were just “!M” for a queue manager name of 4-characters. The actual queue manager name is provided in message CSQN121I and that is what we need to use.

CSQN121I +CSQ2 'DISPLAY QLOCAL' command responses from CSQ2

So there is a new, constructed, response variable in the latest version of MQSCX. It is called QSGQM and it holds the responding queue manager name. So let’s now look at the formatted version of the above command. I’ve also switched on the displaying of totals, which in the case of multiple queue manager responses from a QSG, provides a subtotal count as well as an overall count.

=set formatting(on) distotals(on)
[18:16:44] DISPLAY QLOCAL(Q*) CMDSCOPE(*) CURDEPTH
QSGQM(CSQ1) QUEUE(Q1) TYPE(QLOCAL) QSGDISP(QMGR) CURDEPTH(5) QSGQM(CSQ1) QUEUE(Q2) TYPE(QLOCAL) QSGDISP(QMGR) CURDEPTH(0) Subtotal display responses - Received:2
QSGQM(CSQ2) QUEUE(Q1) TYPE(QLOCAL) QSGDISP(QMGR) CURDEPTH(27) QSGQM(CSQ2) QUEUE(Q2) TYPE(QLOCAL) QSGDISP(QMGR) CURDEPTH(3) Subtotal display responses - Received:2
QSGQM(CSQ3) QUEUE(Q1) TYPE(QLOCAL) QSGDISP(QMGR) CURDEPTH(1) QSGQM(CSQ3) QUEUE(Q2) TYPE(QLOCAL) QSGDISP(QMGR) CURDEPTH(0) Subtotal display responses - Received:2
Total display responses - Received:6

Now if we want to sort the responses coming back from multiple queue managers in a QSG we are not going to lose the information about which queue manager the response was from.

=set formatting(on) distotals(on)
[18:16:44] DISPLAY QLOCAL(Q*) CMDSCOPE(*) =SORTD(CURDEPTH)
QSGQM(CSQ2) QUEUE(Q1) TYPE(QLOCAL) QSGDISP(QMGR) CURDEPTH(27)
QSGQM(CSQ1) QUEUE(Q1) TYPE(QLOCAL) QSGDISP(QMGR) CURDEPTH(5)
QSGQM(CSQ2) QUEUE(Q2) TYPE(QLOCAL) QSGDISP(QMGR) CURDEPTH(3)
QSGQM(CSQ3) QUEUE(Q1) TYPE(QLOCAL) QSGDISP(QMGR) CURDEPTH(1)
QSGQM(CSQ3) QUEUE(Q2) TYPE(QLOCAL) QSGDISP(QMGR) CURDEPTH(0)
QSGQM(CSQ1) QUEUE(Q2) TYPE(QLOCAL) QSGDISP(QMGR) CURDEPTH(0)
Total display responses - Received:6

As you can see, with this type of display, the subtotal lines are removed since the responses are no longer grouped together by the responding queue manager so they don’t make sense anymore.

In addition to enabling sorted displays to operate across a Queue Sharing Group, the introduction of QSGQM is helpful in other situations too.

When using a CMDSCOPE(*) command within a foreach loop you can now tell which member queue manager the response came from because the QSGQM response variable is available to you there too. Here’s a very small example.

foreach(DISPLAY QLOCAL(Q*) =SORTD(CURDEPTH) CMDSCOPE(*))
  print "Queue", QUEUE, "on QMgr", QSGQM, "has", CURDEPTH, "messages"
endfor

And in fact anywhere in your scripting where you use CMDSCOPE(*) commands, the queue manager name is now available as a response variable.

We hope this will make interacting with your Queue Sharing Group more easily scriptable.


The new version can be downloaded from the MQSCX Download Page. Any current licensed users of MQSCX can run the new version on their existing licence. If you don’t have a licence and would like to try out MQSCX then send a note to support@mqgem.com and a 1-month trial licence will be sent to you.

Viewing only what you need

I do like a concise display when I am making MQSC enquiries of my queue manager. I find it helps to ensure the report is correct, and the output is clear if it only shows what you need to see and nothing spurious.

This is often not possible though because of the attributes that MQ deems necessary to return to you. There are many examples, a few of which follow to illustrate what I mean.

Applications connected to my Queue Manager

If I want to see a quick snapshot of the applications connected to my queue manager I can use the DISPLAY CONN(*) WHERE(APPLTYPE EQ USER) command. This will show me the connection IDs and not a lot else by default:-

CONN(8D08D86400E00040) EXTCONN(414D5143514D31202020202020202020) TYPE(CONN) APPLTYPE(USER)
CONN(8D08D864007F0240) EXTCONN(414D5143514D31202020202020202020) TYPE(CONN) APPLTYPE(USER)
CONN(8D08D86400E10040) EXTCONN(414D5143514D31202020202020202020) TYPE(CONN) APPLTYPE(USER)
CONN(8D08D86400800240) EXTCONN(414D5143514D31202020202020202020) TYPE(CONN) APPLTYPE(USER)

Really what I want to see is the name of the application, and perhaps the user ID it is running with, so I add those two attributes to my command.

DISPLAY CONN(*) WHERE(APPLTYPE EQ USER) APPLTAG USERID

And now I have output like the following because the answer has got too long to fit on a single line per response.

AMQ8276I: Display Connection details.
CONN(8D08D86400E00040)               EXTCONN(414D5143514D31202020202020202020)   TYPE(CONN)
APPLTAG(MQGem Software MO71)         APPLTYPE(USER)      USERID(mqgemusr)
AMQ8276I: Display Connection details.
CONN(8D08D864007F0240)               EXTCONN(414D5143514D31202020202020202020)   TYPE(CONN)
APPLTAG(MQGem Software MQSCX)        APPLTYPE(USER)      USERID(mqgemusr)
AMQ8276I: Display Connection details.
CONN(8D08D86400E10040)               EXTCONN(414D5143514D31202020202020202020)   TYPE(CONN)
APPLTAG(MQGem Software MO71)         APPLTYPE(USER)      USERID(mqgemusr)
AMQ8276I: Display Connection details.
CONN(8D08D86400800240)               EXTCONN(414D5143514D31202020202020202020)   TYPE(CONN)
APPLTAG(MQGem Software MQSCX)        APPLTYPE(USER)      USERID(mqgemusr)

Much of this output is taken up showing me the connection IDs, which are actually not interesting when what I’m after is the application names. To make this display more concise, I’d like to be able to remove those attributes that I didn’t actually ask for. Command modifiers in MQSCX is a new feature that allows you to do just that. I can enhance the above command as follows:-

DIS CONN(*) WHERE(APPLTYPE EQ USER) APPLTAG USERID -CONN,EXTCONN,TYPE

and now my output looks like this – back to a single line per response.

APPLTAG(MQGem Software MO71)  APPLTYPE(USER) USERID(mqgemusr)
APPLTAG(MQGem Software MQSCX) APPLTYPE(USER) USERID(mqgemusr)
APPLTAG(MQGem Software MO71)  APPLTYPE(USER) USERID(mqgemusr)
APPLTAG(MQGem Software MQSCX) APPLTYPE(USER) USERID(mqgemusr)

Depths of Local Queues

When listing local queues to discover the depths of messages on them, you might use the following command.

DISPLAY QLOCAL(*) WHERE(CURDEPTH GT 0)

This would return you the TYPE attribute even though you have only asked for QLOCALs and the TYPE attribute isn’t conveying anything helpful. If you issue this command on a z/OS queue manager, you will also always be returned the QSGDISP attribute, even if you are not running a queue manager in a Queue Sharing Group and the value of that attribute is always QSGDISP(QMGR).

QUEUE(SYSTEM.CHANNEL.SYNCQ)            TYPE(QLOCAL) QSGDISP(QMGR) CURDEPTH(10)
QUEUE(SYSTEM.CHLAUTH.DATA.QUEUE)       TYPE(QLOCAL) QSGDISP(QMGR) CURDEPTH(3)
QUEUE(SYSTEM.CLUSTER.REPOSITORY.QUEUE) TYPE(QLOCAL) QSGDISP(QMGR) CURDEPTH(3)
QUEUE(SYSTEM.DURABLE.SUBSCRIBER.QUEUE) TYPE(QLOCAL) QSGDISP(QMGR) CURDEPTH(1)
QUEUE(SYSTEM.HIERARCHY.STATE)          TYPE(QLOCAL) QSGDISP(QMGR) CURDEPTH(2)
QUEUE(SYSTEM.RETAINED.PUB.QUEUE)       TYPE(QLOCAL) QSGDISP(QMGR) CURDEPTH(4)

I can make this display more concise by using modifiers to remove the attributes that I don’t want to see.

DISPLAY QLOCAL(*) WHERE(CURDEPTH GT 0) -TYPE -QSGDISP
QUEUE(SYSTEM.CHANNEL.SYNCQ)            CURDEPTH(10)
QUEUE(SYSTEM.CHLAUTH.DATA.QUEUE)       CURDEPTH(3)
QUEUE(SYSTEM.CLUSTER.REPOSITORY.QUEUE) CURDEPTH(3)
QUEUE(SYSTEM.DURABLE.SUBSCRIBER.QUEUE) CURDEPTH(1)
QUEUE(SYSTEM.HIERARCHY.STATE)          CURDEPTH(2)
QUEUE(SYSTEM.RETAINED.PUB.QUEUE)       CURDEPTH(4)

Channel Status

There are quite a number of attributes returned on DISPLAY CHSTATUS, and many of them for very good reason. However, sometimes you want a more concise view of only what you are currently looking to display. Rather than removing each of these many attributes individually by name, you can remove all of them at once and then add back in the ones you actually want to see with the ‘+’ (plus) modifier. Here’s an example of that.

DISPLAY CHSTATUS(*) -ALL +CHANNEL,RQMNAME,LSTMSGDA,LSGMSGTI
CHANNEL(TO.QM3) LSTMSGDA(2023-08-22) LSTMSGTI(17.05.52) RQMNAME(QM3)
CHANNEL(TO.QM4) LSTMSGDA(2023-08-22) LSTMSGTI(17.05.52) RQMNAME(QM4)
CHANNEL(TO.QM2) LSTMSGDA(2023-08-22) LSTMSGTI(17.05.52) RQMNAME(QM2)
CHANNEL(TO.QM1) LSTMSGDA(2023-08-22) LSTMSGTI(17.05.17) RQMNAME(QM4)
CHANNEL(TO.QM1) LSTMSGDA(2023-08-22) LSTMSGTI(17.05.17) RQMNAME(QM2)
CHANNEL(TO.QM1) LSTMSGDA(2023-08-22) LSTMSGTI(17.05.14) RQMNAME(QM3)

Multiple modifiers to add/remove

If you have lots of similarly named attributes to add or remove from your display command output, you can use the # pattern matcher. For example, on channel objects there are several EXIT names, all containing the word “EXIT”. You can remove all those from the output with one modifier, thus:

DISPLAY CHANNEL(*) ALL -#EXIT

I’m sure you have your favourite displays that have attributes you wish you could hide. Well now you can. Use a command modifier to remove any attributes you don’t want displayed to you. Or completely re-design your command output by removing everything and then adding in only those attributes you wish to see.

Remember that if you end up with quite a long command, you can make a synonym to save you having to type it in again.


The new version can be downloaded from the MQSCX Download Page. Any current licensed users of MQSCX can run the new version on their existing licence. If you don’t have a licence and would like to try out MQSCX then send a note to support@mqgem.com and a 1-month trial licence will be sent to you.

MQSCX version 9.3.2 is released

MQGem Software is pleased to announce that a new version of MQSCX, our command line extended MQSC tool for IBM MQ, is now available.

The main features of the release are as follows:-

Command Modifiers to remove attributes from your DISPLAY output

Ever wanted to make a more concise DISPLAY output and remove some of the attributes that MQ returned that you don’t need? Now you can. For more on this, take a look at this blog post.

Improved column support

MQSCX originally had fixed columns choosing by default to use the number of columns that would fit in your screen width, although you could over-ride that if you wished. Now, an alternative scheme is available which will ensure that everything lines up in columns based on the attributes rather than the fixed column width. If you’ve ever noticed that one excessively long queue name causes the following column not to line up then this is for you. For some example displays and more details about this new feature, read this blog post.

Sorting

Sorting directly on your DISPLAY command

While it has always been possible to write scripts and sort your output that way (see this example as a reminder), now you can sort directly on the DISPLAY command with two new clauses, =SORT() and =SORTD(). To see some examples of these in action, read this blog post.

Limiting your responses

Our MQEV commands have the concept of limiting the number of responses that are returned. No one wants to view 10,000 display output responses. So instead, you can limit them to smaller numbers that are manageable to look through. This is done for both screen real estate and performance reasons in MQEV. MQ commands don’t have such a concept, but it is still useful to limit the display real estate used, even if you can’t limit the number of responses the command server sends. A new clause =MAXRESP() with accompanying default =set defmaxresp(unlimited | integer) are added in this release. You can see examples in this blog post.

Improvements to CMDSCOPE(*) responses

Responses returned from commands issued to a Queue Sharing Group with CMDSCOPE(*) are returned in groups, several from each queue manager. To identify which queue manager, you use the messages that “wrap” the group. This however, does not help you if you decide you need to sort the output. So, we have introduced a pseudo-attribute QSGQM to contain this information so that it is not lost when you sort the output. For more on how this works, read this blog post.

Comparing dotted version strings

Back when MQ versions generally only had two digits separated by a dot, they could be interpreted as floating point numbers and compared that way. Now they mostly have 3 digits separated with 2 dots and are no longer a valid number to compare. So this release introduced a function cmpver() that can be passed two dotted version strings to see which is higher. This is mainly needed for working with versions in the binary CCDT file and can be seen in use in our sample, CCDTVer.mqx.

64-bit support on Windows

Since IBM are strongly hinting of the imminent demise of 32-bit MQ libraries, it was time to update MQSCX to be a 64-bit application on Windows. It is already 64-bit on all the other platforms.


The new version can be downloaded from the MQSCX Download Page. Any current licensed users of MQSCX can run the new version on their existing licence. If you don’t have a licence and would like to try out MQSCX then send a note to support@mqgem.com and a 1-month trial licence will be sent to you.

IBM MQ and MQ Appliance News – June 2023

On Tuesday June 20th, IBM Hursley released the next in the series of Continuous Delivery releases for IBM MQ V9.3 and the MQ Appliance, IBM MQ V9.3.3.

Downloading IBM MQ Version 9.3.3

Here is the announcement letter:-

Links of interest:-


We’ll collect up any other links about the new release as we find them and put them all here.

IBM MQ and MQ Appliance News – February 2023

On Thursday February 16th, IBM Hursley released the next in the series of Continuous Delivery releases for IBM MQ V9.3 and the MQ Appliance, IBM MQ V9.3.2. The z/OS version of the same will be available on March 3rd.

https://twitter.com/RobParkerTech/status/1626218944335081472

Downloading IBM MQ Version 9.3.2

Here is the announcement letter:-

Links of interest:-


We’ll collect up any other links about the new release as we find them and put them all here.

New training modules: What’s New in IBM MQ V9.2.0 and V9.3.0

MQGem is pleased to announce the availability of two new intermediate training modules covering all the new features in IBM MQ V9.2.0 and IBM MQ V9.3.0.

Each training module has the same aim; to take you through all the features that make up the LTS release, which includes the features in the preceding CD releases that were rolled up into the LTS release.

The two new modules are named:

  • MQG-201-91 – What’s New in IBM MQ up to V9.2.0
  • MQG-201-92 – What’s New in IBM MQ up to V9.3.0

Platform Coverage: Both modules provide instructions for IBM MQ on Unix, Windows and z/OS, but not yet for IBM i.
Module Duration: It is expected that each module will take you around 6 – 10 hours to complete.

Full details of what is covered in each module can be reviewed in our training brochure.

If you haven’t tried an MQGem training module before, you can try out our “MQG-101-00: First steps with IBM MQ” module for FREE. This module is freely available for two reasons:-

  • To allow you to try out an MQGem training module and see what the format is like
  • To teach you pre-requisite skills for managing IBM MQ, so that other modules can rely upon you having those skills

If you like the format, why not sign up to learn about IBM MQ V9.3.0. Our training modules are great value for money, providing training in IBM MQ from an expert in the product, for a fraction of the cost of classroom based training.

Sign up for some MQ training today by contacting us at learn@mqgem.com.

Looking back on 2022

In this post we look back on the year that was 2022 and what happened in both IBM MQ, and MQGem Software.

New Versions

Both IBM MQ and MQGem Software products had a number of new releases in 2022.

MQGem Software products

MO71 – our graphical administrative product for IBM MQ – had two new versions released this year. The first, version 9.2.3 was a hugely feature rich release which arrived in March. Later in the year, in June, we re-versioned MO71 to match the new first two digits of MQ when IBM MQ V9.3.0 came out while adding support for Command Level 930 on Distributed. Command Level support for 930 on z/OS was added as a minor update in July, customer requested features to Prompt for KDB password, export MQSC on one-line and improvements to Object Filtering in Activity Trace were added in another minor update in September, and another minor update added Command Level support for 931 in October. If you’re interested in what was in the various IBM MQ Command Levels, check out this post.

A minor update of MQEdit in January added descriptions to the MQMD format field, then in September we were adding a customer requested feature to help to reduce the number of MQ Command Not Auth Events generated when obtaining the list of queues, and took the opportunity to re-version MQEdit to V9.3.0 match the first two digits of MQ. We released a playlist of short videos about different facets of MQEdit in Feburary.

MQEV – our Events and Accounting & Statistics processor has had a number of minor updates this year to provide support for new IBM MQ Command Levels, 925 in March, 930 in July and 931 in October. It has also been re-versioned to V9.3.0 to match the first two digits of MQ.

Two new versions of MQSCX – our extended MQSC product, version 9.3.0 was released in July supporting the new IBM MQ command levels, and added support for reply queue prefix. Version 9.3.1 was released in October with new features to help tell whether your scripts were completely successful and some new built in functions we found useful as a result of migrating CAPEXPRY from CUSTOM to real attribute.

Q had a minor update in July to allow you to provide your own application name in the program, and to set header and footer text when writing messages out to a file.

IBM MQ Fix Packs and new function

One new Fix Pack on IBM MQ V9. Fix Pack 9.0.0.13 was released in April. There are no plans from IBM to release any further Fix Packs on this version, and it has been EOS since 30th September 2021.

Two new Fix Packs on IBM MQ V9.1. Fix Pack 9.1.0.11 was released in March. Fix Pack 9.1.0.12 was released in October.

Three new Fix Packs on IBM MQ V9.2. Fix Pack 9.2.0.5 was released in February. Fix Pack 9.2.0.6 was released in June. Fix Pack 9.2.0.7 was released in December.

Two new Fix Packs in IBM MQ V9.3. Fix Pack 9.3.0.1 was released in September. Fix Pack 9.3.0.2 was released in December.

There were also three new IBM MQ releases made available in 2022. continuous delivery (CD) release V9.2.5 in February, Long Term Service (LTS) release V9.3.0 in June/July, and continuous delivery (CD) release V9.3.1 in October.

2022 has been a great year for all things MQ. MQGem wishes all its customers, readers, and friends a Happy and Prosperous 2023. HAPPY NEW YEAR!

IBM MQ and MQ Appliance News – October 2022

On Thursday October 20th, IBM Hursley released the next in the series of Continuous Delivery releases for IBM MQ V9.3 and the MQ Appliance, IBM MQ V9.3.1.

Downloading IBM MQ Version 9.3.1

Links of interest:-


We’ll collect up any other links about the new release as we find them and put them all here.