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. ハンズオンの全体像
このハンズオンでは、以下の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のコマンドを使用してキューマネージャーを作成します。
カスタムネットワークの作成
まずは、コンテナ間でメッセージのやり取りを行うために、カスタムネットワークを作成します。
今回は、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 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の作成
次に、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
ローカルキューの作成
次に、ローカルキューである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
を押します。
キューにメッセージを送信
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 でリモートキューを作成
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.
トランスミッションキューを作成
次に、QM1でTRANS.Q.1
という名前のトランスミッションキューを作成します。
以下のコマンドを実行してください。
define qlocal(TRANS.Q.1) usage(xmitq)
ここで、usage(xmitq)
はこのキューの用途がトランスミッションキューであることを指定しています。
以下のような結果が表示されることを確認してください。
AMQ8006I: IBM MQ queue created.
6‑3 送信チャネルの定義
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へメッセージを送信する
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. ハンズオン資料リンク
2. 初級編 MQの基本操作(CLI版)(本記事)
さらに詳しい情報をお探しの方へ
IBMの最新情報、イベント情報、さらに役立つ資料は、以下のIBM Communityでも発信・格納されています。
最新のトレンドや有益な情報をチェックするために、ぜひご覧ください!
- WebSphere: IBM Community - WebSphere
WebSphere関連の最新情報やディスカッション、イベント情報、技術資料を公開中!
- ELM (Engineering Lifecycle Management): IBM Community - ELM
ELMに関する最新のイベント情報、ナレッジ共有、便利なドキュメントをチェック!
- Integration: IBM Community - Integration
Integrationに関する最新のイベント情報、ナレッジ共有、便利なドキュメントをチェック!