前回までの分散キューイング記事の続き。WebSphere MQのチャネル・イニシエーターの機能の確認をする。参考文献は記事末尾をご参照。
前回のリモート・トリガリングがメッセージの受信側のキューのトリガー・モニター設定なら、チャネル・イニシエーターは送信側チャネルのトリガー・モニターとしての機能を提供する。これは、トランスミッション・キューをトリガー付きキューとして設定することで、トリガリング条件を満たすメッセージがputされると、トリガー・メッセージがイニシエーション・キューに送付され、対応する送信側チャネルをSTARTさせる為にチャネル・イニシエーターが起動させる。
チャネル・イニシエーターのトリガリング構成図
チャネル・イニシエーターの構成定義
トランスミッション・キューのトリガリングを有効化しチャネルの切断間隔を30秒に設定する。その後送信側のチャネルを再起動し30秒で切れることを確認する。
QMC側
$ runmqsc QMC < exe4.txt Starting MQSC for queue manager QMC. 1 : alter ql(QMW) trigger + : trigtype(FIRST) + : trigdata(QMC.QMW) + : initq(SYSTEM.CHANNEL.INITQ) AMQ8008: WebSphere MQ queue changed. 2 : alter channel(QMC.QMW) chltype(SDR) + : discint(30) AMQ8016: WebSphere MQ channel changed. : 2 MQSC commands read. No commands have a syntax error. All valid MQSC commands were processed.
STOP CHL(QMC.QMW) 15 : STOP CHL(QMC.QMW) AMQ9533: Channel 'QMC.QMW' is not currently active. START CHL(QMC.QMW) 16 : START CHL(QMC.QMW) AMQ8018: Start WebSphere MQ channel accepted. DIS CHSTATUS(QMC.QMW) 17 : DIS CHSTATUS(QMC.QMW) AMQ8417: Display Channel Status details. CHANNEL(QMC.QMW) CHLTYPE(SDR) CONNAME(127.0.0.1(1414)) CURRENT RQMNAME(QMW) STATUS(RUNNING) SUBSTATE(MQGET) XMITQ(QMW) <STARTから30秒後に再度ステータス確認> DIS CHSTATUS(QMC.QMW) 18 : DIS CHSTATUS(QMC.QMW) AMQ8420: Channel Status not found.
QMW側
$ runmqsc QMW < exe4w.txt Starting MQSC for queue manager QMW. 1 : alter ql(QMC) trigger + : trigtype(FIRST) + : trigdata(QMW.QMC) + : initq(SYSTEM.CHANNEL.INITQ) AMQ8008: WebSphere MQ queue changed. 2 : alter channel(QMW.QMC) chltype(SDR) + : discint(30) AMQ8016: WebSphere MQ channel changed. : 2 MQSC commands read. No commands have a syntax error. All valid MQSC commands were processed.
STOP CHL(QMW.QMC) 5 : STOP CHL(QMW.QMC) AMQ9533: Channel 'QMW.QMC' is not currently active. START CHL(QMW.QMC) 6 : START CHL(QMW.QMC) AMQ8018: Start WebSphere MQ channel accepted. DIS CHSTATUS(QMW.QMC) 8 : DIS CHSTATUS(QMW.QMC) AMQ8417: Display Channel Status details. CHANNEL(QMW.QMC) CHLTYPE(SDR) CONNAME(127.0.0.1(4141)) CURRENT RQMNAME(QMC) STATUS(RUNNING) SUBSTATE(MQGET) XMITQ(QMC) <STARTから30秒後に再度ステータス確認> DIS CHSTATUS(QMW.QMC) 9 : DIS CHSTATUS(QMW.QMC) AMQ8420: Channel Status not found.
チャネル・イニシエーターの動作確認
amqsputを用いてリモート・キューQRMT.Aにメッセージをputする。ただし、事前に双方のローカル・キューQL.Aのトリガリング機能は無効にしておく(このトリガリングはamqsreq用の為)。
ALTER QL(QL.A) NOTRIGGER 19 : ALTER QL(QL.A) NOTRIGGER AMQ8008: WebSphere MQ queue changed.
ここでは例としてQMC→QMWへのPUTを確認する。
$ amqsput QRMT.A QMC Sample AMQSPUT0 start target queue is QRMT.A I send a message from QMC manager. Sample AMQSPUT0 end $ amqsget QL.A QMW Sample AMQSGET0 start message no more messages Sample AMQSGET0 end $
確かにチャネルが自動起動してメッセージが送信されたことを確認できた。続けてamqsreqで検証するべくQL.Aのトリガーを有効化する。
alter ql(QL.A) trigger 11 : alter ql(QL.A) trigger AMQ8008: WebSphere MQ queue changed.
次にQMW上でトリガー・モニターを起動する。
$ runmqtrm -q QL.INITQ -m QMW 01/14/13 00:02:31 : WebSphere MQ trigger monitor started. <後述のamqsreqを実行すると下記のメッセージが出力される> __________________________________________________ 01/14/13 00:02:36 : Waiting for a trigger message /opt/mqm/samp/bin/amqsech 'TMC 2QL.A PR.ECHO /opt/mqm/samp/bin/amqsech QMW ' Sample AMQSECHA start I send a message from QMC with amqsreq. MQGET ended with reason code 2033 Sample AMQSECHA end 01/14/13 00:03:50 : End of application trigger. __________________________________________________ 01/14/13 00:03:50 : Waiting for a trigger message
そして、QMC上でamqsreqを実行する。
$ amqsreq QRMT.A QMC QM.REPLY Sample AMQSREQ0 start server queue is QRMT.A replies to AMQ.50F2939020004E02 I send a message from QMC with amqsreq. response no more replies Sample AMQSREQ0 end $
以上より、QMC, QMW上の両チャネルが自動的に起動しメッセージを送受できることを確認できた。
最後にローカル・キューQL.Aのトリガー機能をオフにする。
ALTER QL(QL.A) NOTRIGGER
参考文献
- WebSphere MQ System Administration Guide Version 7.0
- WebSphere MQ 入門書
- MQ設計虎の巻: 第2回「WebSphere MQの特長と主な機能(後編)」