WebSphere MQ: ローカル・キュー操作 – amqsput, amqsget, amqsbcg

サンプルプログラムを使用して作成したキューへのget, put, ブラウズ操作を確認する。実行環境はLinux (CentOS v6.3)。この記事で使用しているキュー・マネージャーの作成、起動はこちら、またキューの作成はこちらの記事に記載。参考サイトは記事末尾をご参照。

検察パスの追加

提供されいているサンプルプログラム・ユーティリティー(amqsput, amqsget, amqsbcg)への検索パスの追加と追加確認。

ただ、これだと再ログインするとパス設定がリセットされてしまうので、mqmユーザー固有の設定として.bash_profileファイルへ設定する。(インストール時にmqmユーザーを作成していなかった場合、デフォルトでは.bash_profileファイルは作成されていない為、新規作成となる。)

※「←」以降の文字列はコメント

ローカル・キューにメッセージをput

amqsputを用いてローカル・キューql.aメッセージをputする。amqsputの書式は下記の通り。

実行したがエラーコード2085が発生し終了。mqrcコマンドで確認すると当該のキューが見つかりませんのとのこと。原因はキューの作成時にキュー名をシングルクォーテーションで囲まずに定義すると大文字に変換されて定義されてしまうとのこと。

MQのオブジェクト(キュー、キューマネージャー、チャネル等)は大文字、小文字を識別します。
プログラムなどで、キュー名、キューマネージャー名を指定する場合は、大文字、小文字に注意してください。
特に、MQSCコマンドのDEFINEでキュー名を指定する場合、明示的に小文字で作成する場合には、’ ‘(シングルクォーテーション)で囲む必要があります。
シングルクォテーションを使用せずに、小文字で指定すると、自動的に大文字に変換されて定義されます。
MQでは、便宜上、オブジェクト名を、大文字に統一することをお勧めします。
参考:MQ設計虎の巻: 第8回「トラブル・シューティング」

その為、正しくは下記のように引数を与えて、実行する。

amqsputが実行されると、最初の二行を出力した後、標準入力からテキスト行を読み込み、それを引数で与えたキューへputする。標準入力から空行もしくはnull(EOF)を読み取ると、キューをクローズして、キュー・マネージャーとの接続を切断、プログラムを終了する。そこら辺の仕様は実際にsampleプログラム(C言語)を確認すると明確である。

amqsputのソース – /opt/mqm/samp/amqsput0.c

空行’\n’か’null’の際にwhileループの条件判定CompCodeにMQCC_FAILEDを代入してループを抜けるように組んである。残り2つのサンプル・プログラムについても、同フォルダにソースが保管されているので、時間があれば確認してみると良いと思う。プログラムの冒頭にその論理構造がコメントブロックに記載されているので、初見でも読みやすい。

キューのメッセージを表示

サンプル・プログラムamqsbcgを用いてQL.Aキューに保管されている1件のメッセージ内容を確認する。

メッセージ内容を16進数と文字列の両方で出力していることが確認できた。

キューからメッセージをget

amqsgetを使用してQL.Aキューからメッセージをgetしキューを空にする。

先ほどputしたメッセージをget後に15秒キューへのputを待ち、何もputされなければ終了する。

amqsgetのソース – /opt/mqm/samp/amqsget0.c

(MQGMO) gmo.WaitIntervalに対して15000ms=15secを設定していることが分かる。
また、現在のキューの中身が空であることを念のため下記のコマンドで確認する。

CURDEPTH(0)であることから、QL.Aは空と分かる。

参考サイト