WebSphere MQの別名キューの動作を確認する。前回までの記事はこちらのページをご参照。参考サイトは記事の末尾に記載。
別名キューとは
下記のドキュメントより引用。
別名キューとは、キュー・マネージャーが管理するローカル・キューやリモート・キュー定義に対しての「あだ名」になります。(別の言い方をすると、あるキューの「間接的な参照」ということになります)この別名キューを使った場合、物理的な実体は1つしか存在しませんが、アプリケーション・プログラムからはあたかも独立した複数のキューが存在しているかのように扱うことができます。
参考:WebSphere MQ 入門書
対象キューを扱うプログラムにとっては別名キューさえ見えていれば良いので、コンポーネント間を疎結合に保てる。本題とはずれるが、こう言った概念は(少々強引な解釈だが)SQLのviewやOOPの抽象クラスなど他のアーキテクチャにも良くある。
別名キューの作成
runmqscコマンドインターフェイスを用いて既に作成しているローカル・キューQL.Aに対する別名キューQA.Aを作成する。
def qa(QA.A) targq(QL.A) 1 : def qa(QA.A) targq(QL.A) AMQ8006: WebSphere MQ queue created.
TARGQパラメータに参照先(target)となるローカル・キューを指定する。
別名キューQA.Aへのputを禁止 – PUT(DISABLED)
alter qa(QA.A) put(disabled) 2 : alter qa(QA.A) put(disabled) AMQ8008: WebSphere MQ queue changed.
また、ローカル・キューQL.Bに対しても下記の設定、参照先別名キューを定義する。
alter ql(QL.B) put(disabled) 3 : alter ql(QL.B) put(disabled) AMQ8008: WebSphere MQ queue changed. def qa(QA.B) targq(QL.B) 4 : def qa(QA.B) targq(QL.B) AMQ8006: WebSphere MQ queue created. end dis qa(QA.B) put 5 : dis qa(QA.B) put AMQ8409: Display Queue details. QUEUE(QA.B) TYPE(QALIAS) PUT(ENABLED) 6 : end
別名キューの動作確認
サンプルプログラム(amqsput)を使用して、別名キューとローカル・キューにメッセージをputした際の結果を確認する。尚、amqsputの使い方はこちらをご参照。
$ amqsput QL.A qmgr1 Sample AMQSPUT0 start target queue is QL.A I put in QL.A Sample AMQSPUT0 end $ amqsput QA.A qmgr1 Sample AMQSPUT0 start target queue is QA.A I put in QA.A MQPUT ended with reason code 2051 Sample AMQSPUT0 end $ amqsput QL.B qmgr1 Sample AMQSPUT0 start target queue is QL.B I put in QL.B MQPUT ended with reason code 2051 Sample AMQSPUT0 end $ amqsput QA.B qmgr1 Sample AMQSPUT0 start target queue is QA.B I put in QA.B MQPUT ended with reason code 2051 Sample AMQSPUT0 end
想定通りQL.A以外はputでMQRC_PUT_INHIBITEDエラーとなる。QA.Bがエラーとなったのも、参照先のQL.Bのputパラメータがdisabledである為。
$ mqrc 2051 2051 0x00000803 MQRC_PUT_INHIBITED