■IBM MQの概要
勝手な俺の中でのMQの概要w
IBM MQはデータ送受信サーバ。ただし、データ送受信の信頼性を担保し、異環境(メインフレームとOpenシステムとか)どうしのデータ送受信にまつわる作法を実装して面倒なくさい環境間差異を抽象化するシステム。
知らんけど
IBM MQ を初めて使用する場合、 IBM MQの概要について詳しくは、 IBM Developerの LearnMQ を参照してください。
■試用版ダウンロード
https://www.ibm.com/resources/mrs/assets/DownloadList?source=ibmmqtrial&lang=en_US
■システム要件
■インストール方法
↓これが簡単
■マニュアル
↓こちらがわかりやすそうなんでとりあえずこちらを猿真似してみる
mqpgfやmqpcfなどのサードパーティツールがないと上記URLを猿真似できないことがわかった。
■ビキナー用らしい
とりあえずうごかしたいw
$ runmqsc < myprog.in > myprog.out
とかするとmyprog.in に入っている MQSC コマンドを呼び出します。 キュー・マネージャー名を指定していないので、MQSC コマンドはデフォルト・キュー・マネージャーに対して実行されます。 出力はテキスト・ファイル myprog.out に送られるらしい。(なんのこっちゃ)
■MQSC リファレンス
ていうかキューマネージャの起動方法と起動確認方法知らないしw
■キューマネージャ起動
- キュー・マネージャーを開始するには、strmqm コマンドを使用します。
- キュー・マネージャーを停止するには、endmqm コマンドを使用します。
■ IBM MQ Explorer
■Linux での IBM MQ のインストールおよびアンインストール
↓こちらが使えた
■Linux でのコマンド行を使用したローカル・サーバー・インストールの検査
# su - mqm
$ whoami
mqm
$ pwd
/var/mqm
$ ll
合計 12
drwxrwsr-x. 2 mqm mqm 6 12月 8 20:33 config
drwxrwsr-x. 3 mqm mqm 19 12月 8 20:33 conv
drwxrwsrwx. 2 mqm mqm 66 12月 8 20:33 errors
drwxrwsr-x. 3 mqm mqm 27 12月 8 20:33 exits
drwxrwsr-x. 3 mqm mqm 27 12月 8 20:33 exits64
drwxrwsr-x. 2 mqm mqm 6 12月 8 20:33 log
-rw-rw-r--. 1 mqm mqm 661 12月 8 20:33 mqclient.ini
drwxrwsr-x. 5 mqm mqm 53 12月 8 20:33 mqft
-rw-rw-r--. 1 mqm mqm 2475 12月 8 20:33 mqs.ini
drwxrwsr-x. 3 mqm mqm 21 12月 8 20:33 qmgrs
-rw-rw-r--. 1 mqm mqm 1941 12月 8 20:33 service.env
drwxrwsr-x. 4 mqm mqm 32 12月 8 20:33 shared
drwxrwsr-x. 3 mqm mqm 21 12月 8 20:33 sockets
drwxrwsrwx. 2 mqm mqm 6 12月 8 20:33 trace
drwxrwsr-x. 3 mqm mqm 27 12月 8 20:33 web
$ . /opt/mqm/bin/setmqenv -s
$ 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-348.el8.x86_64
O/S Details: CentOS Linux 8
InstName: Installation1
InstDesc:
Primary: No
InstPath: /opt/mqm
DataPath: /var/mqm
MaxCmdLevel: 930
LicenseType: License not accepted
・QMA_chinko
というキュー・マネージャーを作成
$ crtmqm QMA_chinko
AMQ7171E: 使用条件が受諾されていません。 ←なんで?
ぐぐったら、
-
AMQ7171E
-
使用条件が受諾されていません。
-
重大度
-
20 : エラー
-
説明
-
プログラム <挿入_3> では、このインストールの使用条件が受諾されている必要があります。 しかし、<挿入_5> にあるインストール <挿入_4> の使用条件はまだ受諾されていません。
-
応答
-
使用条件を受諾するには、mqlicense コマンドを正常に実行するか、 またはコマンドを再実行する前に環境変数 MQLICENSE=accept を設定する必要があります。
とのことらしい。
$ which mqlicense
/opt/mqm/bin/mqlicense
$ man mqlicense
----(中略)----
$ echo $MQLICENSE
$ MQLICENSE=accept
$ echo $MQLICENSE
accept
$ export MQLICENSE
$ crtmqm QMA_chinko
使用条件が受諾されています。dspmqlic
コマンドを実行して、MQ 使用条件を表示します。
この IBM MQ のコピーの残りの試行期間は 90 日です。
IBM MQ キュー・マネージャー 'QMA_chinko' が作成されました。
ディレクトリー '/var/mqm/qmgrs/QMA_chinko' が作成されました。
キュー・マネージャーはインストール済み環境 'Installation1' に関連付けられています。
キュー・マネージャー 'QMA_chinko' のデフォルト・オブジェクトを作成または置換しています。
デフォルト・オブジェクトの統計 : 作成 83、置換 0、失敗 0
設定を完了中です。
設定が完了しました。
→なんかできた臭いw
・キュー・マネージャーを開始
開始前
$ ps -ef |grep java
mqm 9638 5786 0 17:24 pts/0 00:00:00 grep --color=auto java ←javaプロセスは居ない
$ strmqm QMA_chinko
使用条件が受諾されています。dspmqlic
コマンドを実行して、MQ 使用条件を表示します。
この IBM MQ のコピーの残りの試行期間は 90 日です。
システム・リソース RLIMIT_NOFILE が、IBM MQ には異常に低いレベルに設定されています。
IBM MQ キュー・マネージャー 'QMA_chinko' を開始しています。
キュー・マネージャーはインストール済み環境 'Installation1' に関連付けられています。
ログのやり直しフェーズ中に、キュー・マネージャー 'QMA_chinko' で 6 ログ・レコード がアクセスされました。
キュー・マネージャー 'QMA_chinko' のログのやり直しが完了しました。
キュー・マネージャー 'QMA_chinko' のトランザクション・マネージャーの状態が 回復されました。
プレーン・テキスト通信が有効になっています。
IBM MQ キュー・マネージャー 'QMA_chinko' が V9.3.0.0
を使用して開始されました。
$ ps -ef |grep jav[a]
mqm 11229 11163 0 17:26 ? 00:00:00 /opt/mqm/amqp/bin/../../java/jre64/jre/bin/java -Dcom.ibm.mq.mqxr.service.type=amqp -Dcom.ibm.msg.client.config.location=file:////var/mqm/qmgrs/QMA_chinko//./amqp/amqp_trace.config -Xoptionsfile=/var/mqm/qmgrs/QMA_chinko//./amqp/amqp_java.properties -Djava.util.prefs.PreferencesFactory=com.ibm.mq.commonservices.internal.prefs.NoPreferencesFactory -Dcom.ibm.msg.client.commonservices.wmq.logdir=/var/mqm/qmgrs/QMA_chinko//./errors -Dcom.ibm.msg.client.commonservices.wmq.tracedir=/var/mqm//./trace -Dcom.ibm.msg.client.commonservices.wmq.ffdcdir=/var/mqm//./errors com.ibm.mq.MQXRService.RunMQXRService -t /opt/mqm/amqp/bin/../config -m QMA_chinko -d /var/mqm/qmgrs/QMA_chinko//. -g /var/mqm//.
$ pstree 11229
javaqqq20*[{java}]
→なんか起動した臭いw
・MQSC を開始
$ runmqsc QMA_chinko
5724-H72 (C) Copyright IBM Corp. 1994, 2022.
キュー・マネージャー QMA_chinko に対して MQSC を始動中です。
□カーソルが点滅して入力待ちになる
・ QUEUE1
というローカル・キューを定義
DEFINE QLOCAL (QUEUE1)
1 : DEFINE QLOCAL (QUEUE1)
AMQ8006I: IBM MQ キューが作成されました。
□カーソルが点滅して入力待ちになる
・MQSC を停止
end
2 : end
MQSC コマンドを 1 つ読み取りました。
構文エラーがあるコマンドはありません。
有効な MQSC コマンドはすべて処理されました。
→知らんけどw
・サンプルプログラムの一覧表示
$ ll $MQ_INSTALLATION_PATH/samp/bin
合計 1936
-r-xr-xr-x. 1 mqm mqm 3734 6月 8 2022 amqauthg.sh
-r-xr-xr-x. 1 mqm mqm 37416 6月 8 2022 amqsact
-r-xr-xr-x. 1 mqm mqm 37416 6月 8 2022 amqsactc
-r-xr-xr-x. 1 mqm mqm 10304 6月 8 2022 amqsaem
----(中略)----
-r-xr-xr-x. 1 mqm mqm 10504 6月 8 2022 amqstrg
-r-xr-xr-x. 1 mqm mqm 10512 6月 8 2022 amqstrgc
-r-xr-xr-x. 1 mqm mqm 6120 6月 8 2022 amqswlm
-r-xr-xr-x. 1 mqm mqm 22744 6月 8 2022 amqsxrm
dr-xr-xr-x. 2 mqm mqm 134 12月 8 20:49 gl
・キューにメッセージを書き込み
$ which amqsput
/usr/bin/which: no amqsput in (/opt/mqm/bin:/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin)
→上記のようにサンプルプログラムのパスは取ってないので上記フォルダ直下に移動する。
$ cd $MQ_INSTALLATION_PATH/samp/bin;pwd
/opt/mqm/samp/bin
./amqsput QUEUE1 QMA_chinko
Sample AMQSPUT0 start
target queue is QUEUE1
□カーソルが点滅して入力待ちになる
chinko kayui
ちんこ が かゆい
←メッセージ入力を終了するためにブランク行を 1 行入力
Sample AMQSPUT0 end
→これでメッセージがキューに書き込まれたらしいw
・キューからメッセージを取得
$ ./amqsget QUEUE1 QMA_chinko
Sample AMQSGET0 start
message <chinko kayui> ←ASCIIは正常に取得できた
message <ちんこ窿
窿
ゆい> ←マルチバイト文字は安定の文字化けw
→これで、ローカル・インストールの検査ができたことになるらしい。知らんけど。
■IBM MQ のチュートリアル
- チュートリアル 1: ローカル・キューへのメッセージの送信
キュー・マネージャーのセットアップ、キューの作成、キューへのテスト・メッセージの書き込み、およびメッセージの受信の検証を行うチュートリアル。 - チュートリアル 2: リモート・キューへのメッセージの送信
リモート・キュー・マネージャーへのメッセージの送信方法を示すチュートリアル。 - チュートリアル 3: クライアント/サーバー構成でのメッセージの送信
クライアント・マシンとサーバー・マシンの間のメッセージングをセットアップし、クライアントからメッセージを送信し、その受信を検証するチュートリアル。
1.ローカル・キューへのメッセージ送信
→「■Linux でのコマンド行を使用したローカル・サーバー・インストールの検査」ですでにやれた。
QMA_chinkoキューマネージャとQUEUE1キューを作成したホストはcentos8_5_3
IPアドレスは192.168.56.10
別のホストcentos8_5_2(192.168.56.9)にQMA_omekoキューマネージャとQUEUE20をつくる。
その前に、環境変数に下記を追記しておく。
[root@centos8_5_2 mqm]# diff /opt/mqm/bin/setmqenv{.org,}
219a220,221
> export MQLICENSE=accept
>
[root@centos8_5_2 mqm]# su - mqm
[mqm@centos8_5_2 ~]$ . /opt/mqm/bin/setmqenv -s
[mqm@centos8_5_2 ~]$ echo $MQLICENSE
accept
[mqm@centos8_5_2 ~]$ crtmqm QMA_omeko
[mqm@centos8_5_2 ~]$ strmqm QMA_omeko
[mqm@centos8_5_2 ~]$ runmqsc QMA_omeko
DEFINE QLOCAL (QUEUE20)
end
[mqm@centos8_5_2 ~]$ cd $MQ_INSTALLATION_PATH/samp/bin
[mqm@centos8_5_2 bin]$ ./amqsput QUEUE20 QMA_omeko
おまんこかゆい
[mqm@centos8_5_2 bin]$ ./amqsget QUEUE20 QMA_omeko
Sample AMQSGET0 start
message <おまんこかゆい>
→このように「centos8_5_2」上にも「MQA_omeko」キューマネージャを起動して「QUEUE20」キューを作成して「おまんこかゆい」というメッセージを書き込んで取得できた。
2.リモート・キューにメッセージ送信
やりたいこと
------------------------------------------------------------------------
[送信側] [受信側]
centos8_5_2 centos8_5_3
192.168.56.9 192.168.56.10
MQA_omeko(QUEUE20) → MQA_chinko(QUEUE1)
------------------------------------------------------------------------
手順は
①送信側キュー・マネージャにリモート・キュー定義と伝送キューをセットアップ
②メッセージ・チャネルを定義
③送信側のキュー・マネージャーにテスト・メッセージを書き込み
④受信側のキュー・マネージャーのキューからそのメッセージを取得
らしい。
[mqm@centos8_5_2 ~]$ strmqm QMA_omeko
[mqm@centos8_5_2 ~]$ runmqsc QMA_omeko
define qlocal (QUEUE1) usage (xmitq)
define qremote (Q) rname (Q) rqmname(QUEUE1) xmitq (QUEUE1)
AMQ8006I: IBM MQ キューが作成されました。
→「QUEUE1」がローカルキューで「Q」がリモートキューらしい。知らんけど。
・受信側のcentos8_5_3で実行
[mqm@centos8_5_3 bin]$ runmqsc QMA_chinko
5724-H72 (C) Copyright IBM Corp. 1994, 2022.
キュー・マネージャー QMA_chinko に対して MQSC を始動中です。
define channel (QUEUE20.QUEUE1) chltype (RCVR) trptype (TCP)
1 : define channel (QUEUE20.QUEUE1) chltype (RCVR) trptype (TCP)
AMQ8014I: IBM MQ チャネルが作成されました。
→受信側のチャネルを定義らしい。知らんけど。
------別窓で下記をする------
IBM MQ リスナーのデフォルトポートであるtcp1414が空きポートか調べる。たとえばtcp1414が空いてるか調べるには、
[root@centos8_5_3 ~]# netstat -an|grep 1414 ;echo $?
1
------------------------------
tcp1414が空きポートだった場合は「MQSC」ウィンドウで下記を実行する。
start listener(system.default.listener.tcp)
2 : start listener(system.default.listener.tcp)
AMQ8021I: IBM MQ リスナーの開始要求が受け入れられました。
→これでIBM MQ リスナーが開始したらしい。
end
3 : end
2 MQSC コマンドが読み取られました。
構文エラーがあるコマンドはありません。
有効な MQSC コマンドはすべて処理されました。
[root@centos8_5_3 ~]# netstat -an|grep 1414
tcp6 0 0 :::1414 :::* LISTEN
・送信側のcentos8_5_2で実行
[mqm@centos8_5_2 bin]$ runmqsc QMA_omeko
define channel(QUEUE20.QUEUE1) chltype(sdr) conname('192.168.56.10(1414)') xmitq(QUEUE1) trptype(tcp)
5 : define channel(QUEUE20.QUEUE1) chltype(sdr) conname('192.168.56.10(1414)') xmitq(QUEUE1) trptype(tcp)
AMQ8014I: IBM MQ チャネルが作成されました。
→これで送信側のチャネルを定義できたらしい。知らんけど。
start channel (QUEUE20.QUEUE1)
6 : start channel (QUEUE20.QUEUE1)
AMQ8018I: IBM MQ チャネルの開始が受け入れられました。
→これでチャネルが開始したらしい。知らんけど。
end
9 : end
※ちなみに失敗したチャネルの削除は下記の通り
delete channel(QUEUE20.QUEUE1)
・送信側で操作
[mqm@centos8_5_2 bin]$ ./amqsput Q QUEUE20
Sample AMQSPUT0 start
MQCONNX ended with reason code 2058 ←しっぱいw
3.クライアント/サーバー構成でのメッセージの送信