2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

IBM MQ入門:コンテナで動かすハンズオン 2. 初級編 MQの基本操作(CLI版)

Last updated at Posted at 2025-08-29

1. この記事について

この記事は、IBM MQに関するハンズオン資料シリーズの一部です。
まだ「はじめに」の記事をご覧になっていない方は、まずそちらからご確認ください。

初級編には、GUI版とCLI版の2つのバージョンがあります。
インターフェースは異なりますが、実施する内容はどちらも同じです。

GUI版:Webコンソールを使用
CLI版:Webコンソールを使用せず、コマンドで操作(本記事)
どちらを選んでも問題ありませんが、MQを初めて触る方には、現在の状況を把握しやすいGUI版(別記事)をおすすめします。

この章の位置付け

この章では、MQコンソールを使用してブラウザ上からMQを動かします。

  • このハンズオンによってできるようになること
    • IBM MQの基本的な操作を理解する
    • キューマネージャーの作成と管理
    • ローカルキューとリモートキューの作成
    • メッセージの送受信
  • このハンズオンの目的
    • IBM MQの基本的な操作を実際に体験し、理解を深める
  • 対象者の前提条件
    • IBM MQの基礎を知っていること

前提となる環境

本資料では、以下の内容を前提の環境としています。

本資料の環境 バージョン
git version 2.46.0
podman version 5.3.1 (homebrew)
make (Apple Silicon (Arm64)のmacユーザーの場合) version 4.4.1 (homebrew)

2. ハンズオンの全体像

image.png

このハンズオンでは、以下の2つの基本的な操作について学習します:

ローカルキューへのメッセージ送信

QM1にあるローカルキューに対してメッセージを送信し、次に送信した内容を確認します。
ローカルキューへのメッセージ送信では、以下のコンポーネントを使用します:

  • キューマネージャー(QM1:メッセージキューを管理するシステム
  • ローカルキュー(DEV.QUEUE.1:同一キューマネージャー内でメッセージを格納する領域

リモートキューへのメッセージ送信

QM1にあるリモートキューに対してメッセージを送信し、QM2にあるローカルキューに伝送されたメッセージを確認します。
リモートキューへのメッセージ送信では、以下のコンポーネントを設定・使用します:

  • キューマネージャー(QM1, QM2:QM1が送信側、QM2が受信側
  • カスタムネットワーク(mq-network:キューマネージャー間の通信経路
  • リモートキュー定義(REMOTE.Q.1:QM1上に定義された、QM2上のローカルキューを参照する定義
  • トランスミッションキュー(TRANS.Q.1:QM1からQM2へメッセージを転送するための一時保管場所
  • ローカルキュー(DEV.QUEUE.2:QM2上の実際のメッセージ格納先
  • チャネル(QM1toQM2:QM1とQM2間のメッセージ転送経路

3. インストールイメージの取得

まずはインストールイメージを取得します。

以下のガイドを参考にして、手順を実行していきます。
https://developer.ibm.com/tutorials/mq-connect-app-queue-manager-containers/

Apple Silicon (Arm64)のmacユーザーの場合:

m1以降のmacユーザーの場合は、こちらのガイドに従ってインストールイメージを取得します。

MQ Container GitHubリポジトリで公開されているイメージをgit cloneによって取得します。

git clone https://github.com/ibm-messaging/mq-container.git

取得したファイルに移動します。

cd mq-container

Makefileを使用してMQインストールイメージをプルダウンし、コンテナーイメージを構築します。

make build-devserver

Windowsユーザーの場合:

podmanを使用してイメージの取得を行います。

podman pull icr.io/ibm-messaging/mq:latest

4. キューマネージャーの作成

このセクションではpodmanのコマンドを使用してキューマネージャーを作成します。

カスタムネットワークの作成

image.png

まずは、コンテナ間でメッセージのやり取りを行うために、カスタムネットワークを作成します。

今回は、mq-networkという名前で作成します。

podman network create mq-network

イメージ名の確認

以下のコマンドを実行して、1つ前のセクションで取得したmqのイメージ名を確認します。

podman images

表示されているIMAGE IDをメモしてください。

例:以下の場合、3145ec5524f8がIMAGE IDです。(Windowsの場合、REPOSITORYはicr.io/ibm-messaging/mqと表示されます。)

REPOSITORY                                   TAG                IMAGE ID      CREATED         SIZE
localhost/ibm-mqadvanced-server-dev          9.4.2.0-arm64      3145ec5524f8  11 minutes ago  852 MB

QM1の作成

image.png

コピーしたIMAGE IDを使用して、キューマネージャーを作成します。

まずはQM1を作成します。

podman run --env LICENSE=accept --env MQ_QMGR_NAME=QM1 --volume qm1data:/mnt/mqm --publish 1414:1414 --publish 9443:9443 --detach --env MQ_APP_USER=app --env MQ_APP_PASSWORD=passw0rd --env MQ_ADMIN_USER=admin --env MQ_ADMIN_PASSWORD=passw0rd --name QM1 --network mq-network <your-image-id>

この際、今回のハンズオンで使用するDEV.QUEUE.1はデフォルトで作成されます。

QM2の作成

image.png

次に、QM2を作成します。

podman run --env LICENSE=accept --env MQ_QMGR_NAME=QM2 --volume qm2data:/mnt/mqm --publish 1415:1414 --publish 9444:9443 --detach --env MQ_APP_USER=app --env MQ_APP_PASSWORD=passw0rd --env MQ_ADMIN_USER=admin --env MQ_ADMIN_PASSWORD=passw0rd --name QM2 --network mq-network <your-image-id>

この際、今回のハンズオンで使用するDEV.QUEUE.2はデフォルトで作成されます。

以下のコマンドで現在実行中のコンテナを確認します。

podman ps

以下のように、QM1とQM2が無事に作成されていることを確認してください。

CONTAINER ID  IMAGE                                              COMMAND               CREATED         STATUS         PORTS                                                               NAMES
3e1089b0fc7b  localhost/ibm-mqadvanced-server-dev:9.4.2.0-arm64                        31 seconds ago  Up 31 seconds  0.0.0.0:1414->1414/tcp, 0.0.0.0:9443->9443/tcp, 9157/tcp, 9415/tcp  QM1
8273a595f54d  localhost/ibm-mqadvanced-server-dev:9.4.2.0-arm64                        5 seconds ago   Up 5 seconds   0.0.0.0:1415->1414/tcp, 0.0.0.0:9444->9443/tcp, 9157/tcp, 9415/tcp  QM2

5. 練習:MQ の基本操作

QM1 コンテナに接続

まずはコンテナに接続します。以下のコマンドを実行してください。

podman exec -it QM1 /bin/bash

ローカルキューの作成

image.png

次に、ローカルキューであるDEV.QUEUE.4を新しく作成してみます。

MQSCコマンドを使用すると、キューマネージャーに対してキューやチャネルなどのキュー・マネージャー・オブジェクトを管理できます。

以下のコマンドを実行してMQSCのプロンプトに入ります。

runmqsc QM1

以下のようなメッセージが表示されたら成功です。

bash-5.1$ runmqsc QM1
5724-H72 (C) Copyright IBM Corp. 1994, 2025.
Starting MQSC for queue manager QM1.

次に、以下のコマンドを入力して、Enterを押します。

define qlocal(DEV.QUEUE.4)

以下のような完了メッセージが表示され、無事にDEV.QUEUE.4が作成されたことを確認します。

AMQ8006I: IBM MQ queue created.

次に、作成されたキューの属性を表示してみます。

以下のコマンドを入力して、Enterを押します。

display queue(DEV.QUEUE.4)

以下のような出力になることを確認してください。

キューには最大メッセージ容量(MAXDEPTH)、デフォルトの持続性(DEFPSIST)、PUT/GETの許可(PUT, GET)などさまざまな属性が設定されていることがわかります。

AMQ8409I: Display Queue details.
   QUEUE(DEV.QUEUE.4)                      TYPE(QLOCAL)
   ACCTQ(QMGR)                             ALTDATE(2025-05-15)
   ALTTIME(08.16.34)                       BOQNAME( )
   BOTHRESH(0)                             CAPEXPRY(NOLIMIT)
   CLUSNL( )                               CLUSTER( )
   CLCHNAME( )                             CLWLPRTY(0)
   CLWLRANK(0)                             CLWLUSEQ(QMGR)
   CRDATE(2025-05-15)                      CRTIME(08.16.34)
   CURDEPTH(0)                             CUSTOM( )
   DEFBIND(OPEN)                           DEFPRTY(0)
   DEFPSIST(NO)                            DEFPRESP(SYNC)
   DEFREADA(NO)                            DEFSOPT(SHARED)
   DEFTYPE(PREDEFINED)                     DESCR( )
   DISTL(NO)                               GET(ENABLED)
   HARDENBO                                IMGRCOVQ(QMGR)
   INITQ( )                                IPPROCS(0)
   MAXDEPTH(5000)                          MAXMSGL(4194304)
   MAXFSIZE(DEFAULT)                       MONQ(QMGR)
   MSGDLVSQ(PRIORITY)                      NOTRIGGER
   NPMCLASS(NORMAL)                        OPPROCS(0)
   PROCESS( )                              PUT(ENABLED)
   PROPCTL(COMPAT)                         QDEPTHHI(80)
   QDEPTHLO(20)                            QDPHIEV(DISABLED)
   QDPLOEV(DISABLED)                       QDPMAXEV(ENABLED)
   QSVCIEV(NONE)                           QSVCINT(999999999)
   RETINTVL(999999999)                     SCOPE(QMGR)
   SHARE                                   STATQ(QMGR)
   STREAMQ( )                              STRMQOS(BESTEF)
   TRIGDATA( )                             TRIGDPTH(1)
   TRIGMPRI(0)                             TRIGTYPE(FIRST)
   USAGE(NORMAL)

キューの削除

次に、先ほど作成したDEV.QUEUE.4を削除します。

以下のコマンドを入力して、Enterを押します。

delete qlocal(DEV.QUEUE.4)

以下のような結果が返ってくることを確認してください。

AMQ8007I: IBM MQ queue deleted.

続けて、DEV.QUEUE.4が無事に削除されたかどうか確認します。

先ほどと同様に、以下のコマンドを入力して、Enterを押します。

display queue(DEV.QUEUE.4)

以下のように、IBM MQ object DEV.QUEUE.4 not found.というメッセージが表示されることを確認してください。

AMQ8147E: IBM MQ object DEV.QUEUE.4 not found.

対話モードを終了するには、endと入力してEnterを押します。

キューにメッセージを送信

image.png

QM1にデフォルトで作成されているDEV.QUEUE.1を使用して、キューにメッセージを送信してみましょう。

以下のコマンドを実行します。

/opt/mqm/samp/bin/amqsput DEV.QUEUE.1 QM1

/opt/mqm/samp/bin/にはデフォルトでサンプルアプリケーションであるamqsputが保存されています。

今回はこちらを使用して、メッセージの送信を行います。

以下のメッセージが表示されるので、続けてtest1と入力し、Enterを2回押してください。空行を入力することによって送信が完了します。

Sample AMQSPUT0 start
target queue is DEV.QUEUE.1

メッセージを取得

先ほど送信したメッセージを取得します。

/opt/mqm/samp/bin/amqsget DEV.QUEUE.1 QM1

以下のように、test1というメッセージが取得できることを確認してください。

Sample AMQSGET0 start
message <test1>

メッセージを読み終えるとプログラムは自動で終了します。

6. QM1とQM2を接続する

2つのキューマネージャーQM1とQM2の間でメッセージを送るため、リモートキューとトランスミッションキュー、チャネルを設定します。

QM1 でリモートキューを作成

image.png

QM1でREMOTE.Q.1というリモートキューを作成します。

まずはQM1で対話モードに入ります。

runmqsc QM1

対話モードに入ったら、以下のコマンドを実行します。

define qremote(REMOTE.Q.1) rname(DEV.QUEUE.2) rqmname(QM2) xmitq(TRANS.Q.1)

上記のコマンドにおけるパラメータの説明は以下の通りです。

  • rname(DEV.QUEUE.2):リモート先のキュー名を指定
  • rqmname(QM2):リモートキューマネージャーの名前を指定
  • xmitq(TRANS.Q.1):転送キュー(transmission queue)の名前を指定

以下のような結果が表示されることを確認してください。

AMQ8006I: IBM MQ queue created.

トランスミッションキューを作成

image.png

次に、QM1でTRANS.Q.1という名前のトランスミッションキューを作成します。

以下のコマンドを実行してください。

define qlocal(TRANS.Q.1) usage(xmitq)

ここで、usage(xmitq)はこのキューの用途がトランスミッションキューであることを指定しています。

以下のような結果が表示されることを確認してください。

AMQ8006I: IBM MQ queue created.

6‑3 送信チャネルの定義

image.png

QM1toQM2という名前のチャネルの定義をQM1側で行います。

以下のコマンドを実行してください。

define channel(QM1toQM2) chltype(SDR) conname('QM2(1414)') xmitq(TRANS.Q.1)

SDRは「Sender(送信側)」の略で、このチャネルがメッセージを送信するために使用されることを示します。

以下のような結果が表示されることを確認してください。

AMQ8014I: IBM MQ channel created.

作成したチャンネルを確認します。

display channel(QM1toQM2)

以下のようにチャネルの設定が表示されることを確認してください。

AMQ8414I: Display Channel details.
   CHANNEL(QM1TOQM2)                       CHLTYPE(SDR)
   ALTDATE(2025-05-15)                     ALTTIME(08.53.17)
   BATCHHB(0)                              BATCHINT(0)
   BATCHLIM(5000)                          BATCHSZ(50)
   CERTLABL( )                             COMPHDR(NONE)
   COMPMSG(NONE)                           CONNAME(QM2(1414))
   CONVERT(NO)                             DESCR( )
   DISCINT(6000)                           HBINT(300)
   KAINT(AUTO)                             LOCLADDR( )
   LONGRTY(999999999)                      LONGTMR(1200)
   MAXMSGL(4194304)                        MCANAME( )
   MCATYPE(PROCESS)                        MCAUSER( )
   MODENAME( )                             MONCHL(QMGR)
   MSGDATA( )                              MSGEXIT( )
   NPMSPEED(FAST)                          PASSWORD( )
   PROPCTL(COMPAT)                         RCVDATA( )
   RCVEXIT( )                              RESETSEQ(NO)
   SCYDATA( )                              SCYEXIT( )
   SENDDATA( )                             SENDEXIT( )
   SEQWRAP(999999999)                      SHORTRTY(10)
   SHORTTMR(60)                            SSLCIPH( )
   SSLPEER( )                              STATCHL(QMGR)
   TPNAME( )                               TRPTYPE(TCP)
   USEDLQ(YES)                             USERID( )
   XMITQ(TRANS.Q.1)

対話モードを終了します。endと入力してEnterを押してください。

最後に、exit と入力してQM1のコンテナを離れます。

QM2で受信チャネルとセキュリティ設定

次に、QM2側で設定を行なっていきます。

以下のコマンドを実行して、QM2のコンテナに入ります。

podman exec -it QM2 /bin/bash

QM2の対話モードに入ります。

runmqsc QM2

以下のコマンドを実行して、QM1toQM2の受信側の設定を行います。

define channel(QM1toQM2) chltype(RCVR)

以下のような結果が表示されることを確認してください。

AMQ8014I: IBM MQ channel created.

次に、以下のコマンドを実行します。

SET CHLAUTH(QM1toQM2) TYPE(ADDRESSMAP) ADDRESS(*) USERSRC(CHANNEL) ACTION(REPLACE)

このコマンドは、チャネル認証レコードの設定を行なっています。

IPアドレスに基づく認証マッピング(ADDRESSMAP)で、ADDRESS(*) によりすべての IPアドレスからの接続を許可しています。

今回はデモのため全てのアドレスを許可していますが、実際の業務では厳密にセキュリティを設定する必要があります。

以下のような結果が表示されることを確認してください。

AMQ8877I: IBM MQ channel authentication record set.

最後に以下のコマンドを実行します。

DISPLAY CHLAUTH(QM1toQM2)

設定した項目が反映されていることを確認してください。

AMQ8878I: Display channel authentication record details.
   CHLAUTH(QM1TOQM2)                       TYPE(ADDRESSMAP)
   DESCR( )                                CUSTOM( )
   ADDRESS(*)                              USERSRC(CHANNEL)
   CHCKCLNT(ASQMGR)                        ALTDATE(2025-05-15)
   ALTTIME(09.10.17)

対話モードを終了します。endと入力してEnterを押してください。

最後に、exit と入力してQM2のコンテナを離れます。

7. QM1からQM2へメッセージを送信する

image.png

QM1 でチャネルを開始

QM1のコンテナに入ります。

podman exec -it QM1 /bin/bash

QM1の対話モードに入ります。

runmqsc QM1

チャネルQM1toQM2を起動します。

start channel(QM1toQM2)

以下のような結果が表示されることを確認してください。

AMQ8018I: Start IBM MQ channel accepted.

チャネルの現在の状態を表示します。

display chstatus(QM1toQM2)

以下のように、STATUS(RUNNING)となっていることを確認してください。

AMQ8417I: Display Channel Status details.
   CHANNEL(QM1TOQM2)                       CHLTYPE(SDR)
   CONNAME(10.89.0.24(1414))               CURRENT
   RQMNAME(QM2)                            STATUS(RUNNING)
   SUBSTATE(MQGET)                         XMITQ(TRANS.Q.1)

対話モードを終了します。endと入力してEnterを押してください。

リモートキューにメッセージを投入

REMOTE.Q.1に対してメッセージを送信することで、QM2にメッセージを送信しましょう。

以下のコマンドを実行します。

/opt/mqm/samp/bin/amqsput REMOTE.Q.1 QM1

以下のメッセージが表示されるので、続けてtest2と入力し、Enterを2回押してください。空行を入力することによって送信が完了します。

Sample AMQSPUT0 start
target queue is REMOTE.Q.1

exit と入力してQM1のコンテナを離れます。

QM2 側で受信を確認

それでは、送信したメッセージがチャネルQM1toQM2によってQM2に届いているか確認してみましょう。

QM2のコンテナに入ります。

podman exec -it QM2 /bin/bash

以下のコマンドを実行して、メッセージの受信を行います。

/opt/mqm/samp/bin/amqsget DEV.QUEUE.2 QM2

/opt/mqm/samp/bin/にはデフォルトでサンプルアプリケーションであるamqsgetが保存されています。

以下のように、QM1から送信したメッセージが無事にQM2側で受信できることを確認してください。

Sample AMQSGET0 start
message <test2>

また、複数メッセージ送信後に読み出すと次のように連続で表示されます。

message <test2>
message <test3>

exit と入力してQM2のコンテナを離れます。

8. コンテナの削除

今回作成したコンテナは次の中級編でも継続して使用します。

ハンズオンをやり直す場合やここで終了する場合など、今回作成したコンテナを削除したい場合は、以下の手順を実行してください。

コンテナIDの確認

podman ps

コンテナの停止

podman stop <container id>

コンテナの消去

podman rm <container id>

イメージの確認

podman images

イメージの消去

podman rmi <image id>

マウントされているボリュームの確認

podman volume ls

マウントされているボリュームの消去

podman volume rm <volume name>

カスタムネットワークの確認

podman network rm

カスタムネットワークの消去

podman network rm mq-network

9. ハンズオン資料リンク

1. はじめに

2. 初級編 MQの基本操作(GUI版)

2. 初級編 MQの基本操作(CLI版)(本記事)

3. 中級編 Libertyアプリによるメッセージの送受信

さらに詳しい情報をお探しの方へ

IBMの最新情報、イベント情報、さらに役立つ資料は、以下のIBM Communityでも発信・格納されています。 

最新のトレンドや有益な情報をチェックするために、ぜひご覧ください!

  WebSphere関連の最新情報やディスカッション、イベント情報、技術資料を公開中!

 

  ELMに関する最新のイベント情報、ナレッジ共有、便利なドキュメントをチェック!

 

  Integrationに関する最新のイベント情報、ナレッジ共有、便利なドキュメントをチェック!

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?