4
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のインストール~お役立ちコマンド/メモ

Last updated at Posted at 2024-03-25

はじめに

普段はQiitaを使用させていただいてばかりで、記事を書くことはなかったのですが、
転職を機に金融業界のジャンルから離れることとなりました。

当分触れなくなるであろう金融業界おなじみのMWの知識を忘れないため、
個人の備忘としても残しておこうかと思い記事にいたしました。
本記事のMQ以外のMWの知識も随時更新していきたいと思います。

ダウンロード

IBM MQは以下のサイトからダウンロード可能です。
https://www.ibm.biz/ibmmqtrial

本記事記載時は、最新版の9.3および9.2がダウンロード可能でした。
いずれも試用版は90日間という制約がついています。
今回は「IBM MQ 9.3 Trial for Linux x86-64」をダウンロードしました。

インストール

OS情報

今回はVMWare上に構築した、CentOS8を使用しています。

コマンド
cat /etc/os-release

NAME="CentOS Stream"
VERSION="8"
ID="centos"
~省略~

mqmユーザ/グループ作成

手動で作成しなくてもインストール時に自動で作成してくれるのですが、
実務だとOSのユーザやグループも基本的に管理されており、
作成するまでがセットになってるので、手順を記載しておきます。

コマンド
# グループ作成(gidはお好みで)
groupadd -g 2000 mqm

# ユーザ作成(同じくuidはお好みで)
useradd -m -u 2000 -g mqm mqm

ユーザを作成したら、mqmの「.bash_profile」に以下の情報を追記しておきましょう。

コマンド
export PATH=/opt/mqm/bin:/opt/mqm/samp/bin:/opt/mqm/gskit8/bin:$PATH
export LD_LIBRARY_PATH=/opt/mqm/gskit8/lib64:/opt/mqm/lib64:$LD_LIBRARY_PATH

ファイル確認&解凍

先ほどダウンロードしたファイルをサーバへアップロードし、解凍を行います。
ファイルが大量に表示されますが、使用するのは末尾にでてくるrpm形式のファイルのみです。

コマンド
ls -l "9.3.0.0-IBM-MQTRIAL-LinuxX64.tar.gz"
-rw-r--r-- 1 root root 784177682  3 24 23:34 9.3.0.0-IBM-MQTRIAL-LinuxX64.tar.gz

tar -xvzf "9.3.0.0-IBM-MQTRIAL-LinuxX64.tar.gz"
MQServer/
~省略~
MQServer/MQSeriesJRE-9.3.0-0.x86_64.rpm

ライセンス認証

解凍したファイルの中にMQServerというディレクトリがありますので、
移動後ライセンス認証を行います。
「-accept」オプションを付けるとライセンスを表示せず許可できます。

コマンド
cd MQServer
./mqlicense.sh -accept

インストール

やっと実際のインストールです。
といってもrpmコマンドで必要なパッケージを指定して、
インストールを行うだけですが…。

その他で個人的にこれは入れたほうが良いなと思うものは、以下の3つです。
・Samples
→後述しますが、sampleコマンドを使用してMQに対しPUT/GETすることができます。
・Man
→マニュアル用のパッケージです。
・Msg_ja
→日本語化用パッケージです。

コマンド
# MQのServer関連の基本パッケージ
rpm -ivh \
  MQSeriesServer-9.3.0-0.x86_64.rpm \
  MQSeriesGSKit-9.3.0-0.x86_64.rpm \
  MQSeriesRuntime-9.3.0-0.x86_64.rpm

# おすすめパッケージ
rpm -ivh \
  MQSeriesSamples-9.3.0-0.x86_64.rpm \
  MQSeriesMan-9.3.0-0.x86_64.rpm \
  MQSeriesMsg_ja-9.3.0-0.x86_64.rpm

無事ここまでインストールできれば、以下のようにパッケージが表示されると思います。

コマンド
rpm -aq | sort | grep MQ

MQSeriesGSKit-9.3.0-0.x86_64
MQSeriesJRE-9.3.0-0.x86_64
MQSeriesJava-9.3.0-0.x86_64
MQSeriesMan-9.3.0-0.x86_64
MQSeriesMsg_ja-9.3.0-0.x86_64
MQSeriesRuntime-9.3.0-0.x86_64
MQSeriesSamples-9.3.0-0.x86_64
MQSeriesServer-9.3.0-0.x86_64
MQSeriesWeb-9.3.0-0.x86_64

インストールが終わったら実際にmqmユーザに切り替えて
確認をしてみましょう。

コマンド
# バージョン確認コマンド
dspmqver

Name:        IBM MQ
Version:     9.3.0.0
Level:       p930-L220607.TRIAL
BuildType:   IKAP - (Production)
Platform:    IBM MQ for Linux (x86-64 platform)
Mode:        64-bit
O/S:         Linux 4.18.0-536.el8.x86_64
O/S Details: CentOS Stream 8
InstName:    Installation1
InstDesc:
Primary:     No
InstPath:    /opt/mqm
DataPath:    /var/mqm
MaxCmdLevel: 930
LicenseType: Trial

各種オブジェクト作成

キューマネージャ作成

コマンド
# 今回はTEST01.QMという名前で作成
crtmqm TEST01.QM

この IBM MQ のコピーの残りの試行期間は 90 日です。
IBM MQ キュー・マネージャー 'TEST01.QM' が作成されました。
ディレクトリー '/var/mqm/qmgrs/TEST01!QM' が作成されました。
キュー・マネージャーはインストール済み環境 'Installation1' に関連付けられています。
キュー・マネージャー 'TEST01.QM' のデフォルト・オブジェクトを作成または置換しています。
デフォルト・オブジェクトの統計 : 作成 83、置換 0、失敗 0
設定を完了中です。
設定が完了しました。

キューマネージャ起動

コマンド
strmqm TEST01.QM

この IBM MQ のコピーの残りの試行期間は 90 日です。
システム・リソース RLIMIT_NOFILE が、IBM MQ には異常に低いレベルに設定されています。
IBM MQ キュー・マネージャー 'TEST01.QM' を開始しています。
キュー・マネージャーはインストール済み環境 'Installation1' に関連付けられています。
ログのやり直しフェーズ中に、キュー・マネージャー 'TEST01.QM'  6 ログ・レコード がアクセスされました。
キュー・マネージャー 'TEST01.QM' のログのやり直しが完了しました。
キュー・マネージャー 'TEST01.QM' のトランザクション・マネージャーの状態が 回復されました。
プレーン・テキスト通信が有効になっています。
IBM MQ キュー・マネージャー 'TEST01.QM'  V9.3.0.0
を使用して開始されました。

リスナー起動

コマンド
# そのまま実行すると帰ってこないため、&でバックグラウンド起動
nohup runmqlsr -m TEST01.QM -t TCP -p 1414 &

キューマネージャーの状態確認

コマンド
dspmq
QMNAME(TEST01.QM)                                         STATUS(実行中)

MQプロンプト起動

コマンド
runmqsc TEST01.QM
5724-H72 (C) Copyright IBM Corp. 1994, 2022.
キュー・マネージャー TEST01.QM に対して MQSC を始動中です。

送信チャネル作成

コマンド
# CONNAME:ホスト名(ポート)で記載
# XMITQ:チャネルに紐づける伝送キューを記載
DEFINE CHANNEL('01_TO_02.CH') CHLTYPE(SDR) CONNAME('VM-TEST02(1414)') XMITQ('TEST01_TO_TEST02_XMIT.Q') REPLACE
     1 : DEFINE CHANNEL('01_TO_02.CH') CHLTYPE(SDR) CONNAME('VM-TEST02(1414)') XMITQ('TEST01_TO_TEST02_XMIT.Q') REPLACE
AMQ8014I: IBM MQ チャネルが作成されました。

受信チャネル作成

コマンド
DEFINE CHANNEL('02_TO_01.CH') CHLTYPE(RCVR) REPLACE
     2 : DEFINE CHANNEL('02_TO_01.CH') CHLTYPE(RCVR) REPLACE
AMQ8014I: IBM MQ チャネルが作成されました。

ローカルキュー作成

コマンド
DEFINE QLOCAL('TEST01_LOCAL.Q') REPLACE
     3 : DEFINE QLOCAL('TEST01_LOCAL.Q') REPLACE
AMQ8006I: IBM MQ キューが作成されました。

伝送キュー作成

コマンド
DEFINE QLOCAL('TEST01_TO_TEST02_XMIT.Q') USAGE(XMITQ) REPLACE
     4 : DEFINE QLOCAL('TEST01_TO_TEST02_XMIT.Q') USAGE(XMITQ) REPLACE
AMQ8006I: IBM MQ キューが作成されました。

リモートキュー作成

コマンド
# RQMNAME:接続先システムのキューマネージャ名を記載
# RNAME:接続先システムのローカルキューを記載
# XMITQ:チャネル作成時に記載した伝送キューを指定

DEFINE QREMOTE('TEST01_TO_TEST02_REMOTE.Q') RQMNAME('TEST02.QM') RNAME('TEST02_LOCAL.Q') XMITQ('TEST01_TO_TEST02_XMIT.Q') REPLACE
     5 : DEFINE QREMOTE('TEST01_TO_TEST02_REMOTE.Q') RQMNAME('TEST02.QM') RNAME('TEST02_LOCAL.Q') XMITQ('TEST01_TO_TEST02_XMIT.Q') REPLACE
AMQ8006I: IBM MQ キューが作成されました。

チャネル接続

今回はVMで作成したOSをコピーして、「VM-TEST02」というホスト名で接続先を作りました。
キューマネージャ名は「TEST02.QM」としています。

チャネルシーケンスリセット

コマンド
RESET CHANNEL('01_TO_02.CH')
     2 : RESET CHANNEL('01_TO_02.CH')
AMQ8023I: IBM MQ チャネルのリセット。

チャネル接続

コマンド
START CHANNEL('01_TO_02.CH')
     6 : START CHANNEL('01_TO_02.CH')
AMQ8018I: IBM MQ チャネルの開始が受け入れられました。

チャネル状態確認(SNDチャネル側)

こちらはSNDチャネル側から見たステータスです。

コマンド
# STATUSが「RUNNING」となっていれば接続成功
DISPLAY CHSTATUS('01_TO_02.CH')
     7 : DISPLAY CHSTATUS('01_TO_02.CH')
AMQ8417I: チャネル状況の内容を表示します。
   CHANNEL(01_TO_02.CH)                    CHLTYPE(SDR)
   CONNAME(192.168.179.131(1414))          CURRENT
   RQMNAME(TEST02.QM)                      STATUS(RUNNING)
   SUBSTATE(MQGET)                         XMITQ(TEST01_TO_TEST02_XMIT.Q)

チャネル状態確認(RCVチャネル側)

一方こちらはRCV側から見たステータスです。

コマンド
# STATUSが「RUNNING」となっていれば接続成功
DISPLAY CHSTATUS('01_TO_02.CH')
     1 : DISPLAY CHSTATUS('01_TO_02.CH')
AMQ8417I: チャネル状況の内容を表示します。
   CHANNEL(01_TO_02.CH)                    CHLTYPE(RCVR)
   CONNAME(192.168.179.130)                CURRENT
   RQMNAME(TEST01.QM)                      STATUS(RUNNING)
   SUBSTATE(RECEIVE)

チャネル切断

コマンド
STOP CHANNEL('01_TO_02.CH')
     8 : STOP CHANNEL('01_TO_02.CH')
AMQ8019I: IBM MQ チャネルの停止が受け入れられました。

この状態でチャネルのステータスを確認すると、「STOPPED」となっています。

コマンド
DISPLAY CHSTATUS('01_TO_02.CH')
     9 : DISPLAY CHSTATUS('01_TO_02.CH')
AMQ8417I: チャネル状況の内容を表示します。
   CHANNEL(01_TO_02.CH)                    CHLTYPE(SDR)
   CONNAME(192.168.179.131(1414))          CURRENT
   RQMNAME(TEST02.QM)                      STATUS(STOPPED)
   SUBSTATE( )                             XMITQ(TEST01_TO_TEST02_XMIT.Q)

キュー操作

プット

使用方法は「amqsput [キュー] [キューマネージャ]」となります。
今回は「TEST」という文字列を入力しました。
空行でEnterをすると終了とみなされます。

コマンド
which amqsput
/opt/mqm/samp/bin/amqsput

amqsput TEST01_LOCAL.Q TEST01.QM

Sample AMQSPUT0 start
target queue is TEST01_LOCAL.Q
TEST

Sample AMQSPUT0 end

この状態でrunmqscコマンドでキューの滞留件数(CURDEPTH)を確認すると、
件数が1となっていることがわかります。

コマンド
DISPLAY QLOCAL('TEST01_LOCAL.Q') CURDEPTH
     1 : DISPLAY QLOCAL('TEST01_LOCAL.Q') CURDEPTH
AMQ8409I: キューの内容を表示します。
   QUEUE(TEST01_LOCAL.Q)                   TYPE(QLOCAL)
   CURDEPTH(1)

ゲット

プットと同じく「amqsget [ローカルキュー] [キューマネージャ]」となります。
先ほど投入した「TEST」という文字列が表示されるかと思います。

コマンド
amqsget TEST01_LOCAL.Q TEST01.QM
Sample AMQSGET0 start
message <TEST>
no more messages
Sample AMQSGET0 end

キューの中身をゲットしてますので、滞留件数を確認すると0件になっています。

コマンド
DISPLAY QLOCAL('TEST01_LOCAL.Q') CURDEPTH
     1 : DISPLAY QLOCAL('TEST01_LOCAL.Q') CURDEPTH
AMQ8409I: キューの内容を表示します。
   QUEUE(TEST01_LOCAL.Q)                   TYPE(QLOCAL)
   CURDEPTH(0)

チャネル接続先へのデータの送受信

メッセージ送信

先ほど記載した、チャネル接続とamqsputを使用し接続先システム(今回は「VM-TEST02」)へ、
実際にデータを送信します。
メッセージは「TEST01 to TEST02 Message!」と送ってみます。

メッセージを送る際に気を付けるポイントとしては、
先ほど作成したリモートキューを指定してメッセージを書き込んでください。

コマンド
amqsput TEST01_TO_TEST02_REMOTE.Q TEST01.QM

Sample AMQSPUT0 start
target queue is TEST01_TO_TEST02_REMOTE.Q
TEST01 to TEST02 Message!

Sample AMQSPUT0 end

メッセージ確認

受け手側で、リモートキューに紐づけたローカルキューを確認してみます。
1件メッセージが入ってるのがわかります。

コマンド
DISPLAY QLOCAL('TEST02_LOCAL.Q') CURDEPTH
     2 : DISPLAY QLOCAL('TEST02_LOCAL.Q') CURDEPTH
AMQ8409I: キューの内容を表示します。
   QUEUE(TEST02_LOCAL.Q)                   TYPE(QLOCAL)
   CURDEPTH(1)

amqsgetコマンドで実際にメッセージを確認すると、
先ほど送ったメッセージが届いているのがわかります。

コマンド
amqsget TEST02_LOCAL.Q TEST02.QM

Sample AMQSGET0 start
message <TEST01 to TEST02 Message!>
no more messages
Sample AMQSGET0 end

MQ構成情報取得

MQの中のオブジェクトを1コマンドでバックアップすることができます。
必要ない情報も大量に出てくるため、grepで 「"DEFINE" | grep -v "('SYSTEM"」などを入れると
自身で作成したオブジェクトなどが表示できて便利です。

コマンド
dmpmqcfg -x all -a -z -t all -o 1line -m TEST01.QM

*******************************************************************************
* Script generated on 2024-03-25   at 21.53.01
* Script generated by user 'mqm' on host 'VM-CETNOS01'
* Queue manager name: TEST01.QM
* Queue manager platform: UNIX
* Queue manager command level: (930/930)
* Command issued: dmpmqcfg -x all -a -z -t all -o 1line -m TEST01.QM
*******************************************************************************
ALTER QMGR ACCTCONO(DISABLED) ACCTINT(1800) ACCTMQI(OFF) ACCTQ(OFF) ACTIVREC(MSG) ACTVCONO(DISABLED) ACTVTRC(OFF) AUTHOREV(DISABLED) CCSID(1208) CERTLABL('ibmwebspheremqtest01.qm') CERTVPOL(ANY) CHAD(DISABLED) CHADEV(DISABLED) CHADEXIT(' ') CHLEV(DISABLED) CHLAUTH(ENABLED) CLWLDATA(' ') CLWLEXIT(' ') CLWLLEN(100) CLWLMRUC(999999999) CLWLUSEQ(LOCAL) CMDEV(DISABLED) CONFIGEV(DISABLED) CONNAUTH('SYSTEM.DEFAULT.AUTHINFO.IDPWOS') CUSTOM(' ') DEADQ(' ') DEFCLXQ(SCTQ) DEFXMITQ(' ') DESCR(' ') IMGINTVL(60) IMGLOGLN(OFF) IMGRCOVO(YES) IMGRCOVQ(YES) IMGSCHED(MANUAL) INHIBTEV(DISABLED) INITKEY(' ') IPADDRV(IPV4) LOCALEV(DISABLED) LOGGEREV(DISABLED) MARKINT(5000) MAXHANDS(256) MAXMSGL(4194304) MAXPROPL(NOLIMIT) MAXUMSGS(10000) MONACLS(QMGR) MONCHL(OFF) MONQ(OFF) PARENT(' ') PERFMEV(DISABLED) PSMODE(ENABLED) PSCLUS(ENABLED) PSNPMSG(DISCARD) PSNPRES(NORMAL) PSRTYCNT(5) PSSYNCPT(IFPER) REMOTEEV(DISABLED) REPOS(' ') REPOSNL(' ') REVDNS(ENABLED) ROUTEREC(MSG) SCHINIT(QMGR) SCMDSERV(QMGR) SSLCRLNL(' ') SSLCRYP(' ') SSLEV(DISABLED) SSLFIPS(NO) KEYRPWD(' ') SSLKEYR('/var/mqm/qmgrs/TEST01!QM/ssl/key') SSLRKEYC(0) STATACLS(QMGR) STATCHL(OFF) STATINT(1800) STATMQI(OFF) STATQ(OFF) STRSTPEV(ENABLED) SUITEB(NONE) TREELIFE(1800) TRIGINT(999999999) FORCE
~省略~

オブジェクト権限

Javaのプログラムなど、mqmユーザやグループに所属していないユーザがMQのオブジェクトにアクセスしようとすると、エラーが発生します。
その際は、オブジェクト権限付与のコマンドなどで必要な権限を与えてあげるとアクセス可能になります。

-m:キューマネージャ名
-t:オブジェクトタイプ
-p:権限付与ユーザ

末尾の「+connect」などはそのユーザに対しどのようなオブジェクト権限を付与するか記載します。
詳細は以下のIBMのページなどを見ていただければと思います。
https://www.ibm.com/docs/ja/ibm-mq/9.3?topic=reference-setmqaut-grant-revoke-authority

コマンド
setmqaut -m TEST01.QM -t qmgr -p testuser +connect
setmqaut コマンドが正常に完了しました。

付与された権限は以下のコマンドで確認することが可能です。

コマンド
dspmqaut -m TEST01.QM -t qmgr -p testuser
エンティティー testuser はオブジェクト TEST01.QM について次の許可を持っています:
        connect

最後に

こういった技術系の書き物をするのは初めてで、レイアウトなどいけてなくて申し訳ありません。
慣れてきたら内容含めまたブラッシュアップしていきたいなと思います。

参考サイト

・IBM MQ ダウンロード
https://www.ibm.com/docs/ja/ibm-mq/9.3?topic=roadmap-mq-downloads

・mqlicense (インストール後のライセンスの受け入れ)
https://www.ibm.com/docs/ja/ibm-mq/9.3?topic=reference-mqlicense-accept-license-post-installation

・setmqaut (権限の付与または取り消し)
https://www.ibm.com/docs/ja/ibm-mq/9.3?topic=reference-setmqaut-grant-revoke-authority

4
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
4
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?