...

WebSphere MQ V7.0 Publish/Subscribe入門 Ⅰ. Publish/Subscribeを動かしてみよう. 1.Publush/Subscribeとは Publish/Subscribe機能は、従来のWebSphere MQでのキューを利用したメッセージ連携を、より抽象化

by user

on
Category: Documents
45

views

Report

Comments

Transcript

WebSphere MQ V7.0 Publish/Subscribe入門 Ⅰ. Publish/Subscribeを動かしてみよう. 1.Publush/Subscribeとは Publish/Subscribe機能は、従来のWebSphere MQでのキューを利用したメッセージ連携を、より抽象化
WebSphere MQ V7.0 Publish/Subscribe入門
Ⅰ. Publish/Subscribeを動かしてみよう.
1.Publush/Subscribeとは
Publish/Subscribe機能は、従来のWebSphere MQでのキューを利用したメッセージ連携を、より抽象化
したアプリケーション間連携を実現する仕組みです。
特徴として、
●情報のタイプ/種類を示す「トピック(Topic)」と呼ばれるオブジェクトを利用して、アプリケー
ション間での情報の送受信を行う。
- 「Publisher」と呼ばれる情報を作成し発信するアプリケーションは、このトピックへ情報を渡し
ます。
- 予め「Subscriber」と呼ばれる情報を受信するアプリケーションは、このトピックに対して自分
が興味のある、または自分が必要とする情報を登録することで、トピックに届いた情報の中から
必要な情報を入手することができます。
- ここで、Publisherから発信されSubscriberに渡される情報のことを「Publication」と、また「
Subscriber」が行うTopicへの登録を「Subscription」と、それぞれ呼びます。
●「Publisher」と「Subscriber」は「Topic」を介して連携を行うため、直接お互いのことを認識する
必要がありません。(上記の通り、「PublisherはTopicに対してPublicationを発信するだけ」ですし、
「SubscriberはTopicにSubscriptionを行い、Publicationを受け取るだけ」です)
●1つのTopicに、複数のPublicher、Subscriberが接続できます。
●WebSphere MQでの配布リスト機能と異なり、Publisherが発信した1つのPublicationを、同時に複数の
Subscriberが同時に受信することもできます。(つまり、送信側アプリケーションで明示的に複数の
宛先を指定してMQPUTを行わなくても、複数の受信側アプリケーションに対してメッセージを送ること
ができます)
などがあげられます。
Copyright IBM Japan, Ltd
- 1 -
WebSphere MQ V7.0 Publish/Subscribe入門
2.まずは、動かしてみましょう
面倒な話はここまでにして、WebSphere MQ V7.0のサンプル・プログラムを使って、実際に動かして
みましょう。
利用するサンプル・プログラムは、
●Publisherとして、サンプル・プログラムのamqspub(UNIX,Linux) / amqspub.exe(Windows)
●Subscriberとして、サンプル・プログラムのamqssub(UNIX,Linux) / amqssub.exe(Windows)
です。これらのプログラムは、WebSphere MQ導入時にサンプル・プログラムのパッケージを一緒に導入
していれば、UNIXやLinuxでは"/opt/mqm/samp/bin/"に、Windowsであれば"[WebSphere MQ導入先ディレク
トリー]\C\Tools\Samples\Bin\"にあります。
WebSphere MQ V7.0.1をWindows XP Eドライブの\WMQV7.0に導入した場合
amqssub.exeとamqspub.exeのソース・コードは、それぞれamqssuba.cとamqspuba.cというファイルで
● UNIX系OSまたはLinuxであれば、/opt/mqm/samp/
● Windowsであれば、[WebSphere MQ導入先ディレクトリー]\C\Tools\Samples\
にありますので、ご興味のある方は「覗いて」みて下さい。
(1) キュー・マネージャーの作成と起動
初めに、サンプルを使うためのキュー・マネージャーを作成しましょう。
(次ページの例では、"white"という名前のキュー・マネージャーを使っています)
Copyright IBM Japan, Ltd
- 2 -
WebSphere MQ V7.0 Publish/Subscribe入門
(2) Topicの作成と、ブローカーが起動しているかどうかの確認
作成したキュー・マネージャーが無事に起動できたら、runmqscコマンドを使って、Topicオブジェ
クトを作成します。
Copyright IBM Japan, Ltd
- 3 -
WebSphere MQ V7.0 Publish/Subscribe入門
この例では、"/Rainbow"というTOPICSTR属性を持つTopicオブジェクト"Color"を作成しています。
(大文字/小文字に注意して下さい)
WebSphere MQ V7では、キュー・マネージャーのPSMODE属性が"ENABLED"または"COMPAT"に設定
されている場合、Publish/Subscribeブローカーは自動的に起動します。
display qmgr psmode
2 : display qmgr psmode
AMQ8408: キュー・マネージャーの内容を表示します。
QMNAME(white)
PSMODE(ENABLED)
その状況は、runmqscコマンドの"DISPLAY PUBSUB"コマンドを使って確認することができます。
display pubsub type(all) all
2 : display pubsub type(all) all
AMQ8723: パブリッシュ/サブスクライブ状況の詳細を表示します。
QMNAME(white)
TYPE(LOCAL)
STATUS(ACTIVE)
この時、タスク・マネージャーでWebSphere MQ関連のプロセスを表示させると、amqfqpub.exeと
amqfcxba.exeというプロセスが稼働していることがわかります。これらがPublish/Subscirbe
ブローカーとその作業用プロセスです。(正確には、PSMODE(ENABLED)の場合のみ、これら2つの
プロセスが稼働します)
Windows タスクマネージャによるWebSphere MQ関連の
プロセス表示. Publish/Subscirbe用ブローカー
amqfqpub.exeとその作業用プロセス amqfcxba.exeが
稼働していることが確認できます.(点線で囲まれた
プロセス)
Copyright IBM Japan, Ltd
- 4 -
WebSphere MQ V7.0 Publish/Subscribe入門
LinuxやUNIX系OSをお使いの場合には、psコマンドを使うと確認できます ("ps -ef|grep amq"など)。
ちなみにPublish/Subscribeブローカーを停止させたい場合には、キュー・マネージャーのPSMODE
属性を"DISABLED"に変更します。
PSMODE(DISABLED)に変更後の
"display pubsub"コマンドでの
状況表示. "STATUS(INACTIVE)"に
なっている.
(補足) V6などの以前のバージョンでは、ブローカーの起動と停止はstrmqbrkコマンドとendmqbrk
コマンドを利用しましたが、V7.0からこれらのコマンドは利用できなくなりました。実際に
Windows上のWebSphere MQ V7.0.1でendmqbrkコマンドを実行すると、以下のようなメッセー
ジが表示されます。
F:\work>dspmqver
Name:
WebSphere MQ
Version:
7.0.1.0
CMVC level:
p000-L090813
BuildType:
IKAP - (Production)
F:\work> endmqbrk
endmqbrk コマンドは使用できなくなりました。 Queued Pub/Sub Interface は、キュー
・マネージャーの PSMODE 属性を変更することにより使用可能/使用不可能にできます
。PSMODE を「COMPAT」に設定すると、キューに入れられた pubsub インタフェースが
使用不可に設定されます
一度停止したPublish/Subscirbe用ブローカーを再始動したい場合には、キュー・マネージャーの
PSMODE属性を"ENABLED"に設定するだけです。
Copyright IBM Japan, Ltd
- 5 -
WebSphere MQ V7.0 Publish/Subscribe入門
(3) サンプル・プログラムを動かす
Publisherサンプル・プログラム"amqspub.exe"(Linux,UNIX系OSではamqspub)とSubscriberサン
プル・プログラム"amqssub.exe"(Linux,UNIX系OSではamqssub)は、それぞれ
- 第一パラメータに、Topic名
- 第二パラメータに、キュー・マネージャー名
が指定できます。ここでは、先に作成したキュー・マネージャー "white"と、Topic "Color"を
使います。
では、いよいよサンプル・プログラムを使って、Publish/Subscribeがどのような機能なのかを
見てみましょう。
コマンド・プロンプトを2つ開き、amqssub.exeとamqspub.exeをそれぞれ起動します。
amqspub.exeを起動したところ
amqssub.exeを起動したところ
Copyright IBM Japan, Ltd
- 6 -
WebSphere MQ V7.0 Publish/Subscribe入門
amqspub.exeから、メッセージをTopic "Color"に送信します。すると、amqssub.exe側にメッセージ
が表示されます。
(amqspub.exeはEnterキーによる空行で、またamqssub.exeは何らかのメッセージを30秒間受信
しないと、それぞれ終了します)
これだけだと、サンプル・プログラムamqsput.exeとamqsget.exeによる、キューを介したメッセー
ジの送受信の場合と変わりません。次は、更にもう1つコマンド・プロンプトを開き、amqspub.exeを
実行してみましょう。(次ページ参照)
amqspub.exeが発信したメッセージを、ほぼ同時に2つのamqssub.exeが受信して、画面上に表示する
ことができます。(実行するタイミングによっては、メッセージを受信できないこともありますが、
これについては、Publish/Subscribe機能の詳細でお話ししたいと思います)
Copyright IBM Japan, Ltd
- 7 -
WebSphere MQ V7.0 Publish/Subscribe入門
3つ4つと、更にSubscireberの数を増やしても、同様にPublisherが発信したメッセージを、ほぼ
同時に受信できます。この点が、amqsput.exeとamqsget.exeに代表される「キューを介した、
メッセージ送受信」と異なる点になります。
これまでの「キューを介したメッセージ送受信」の仕組みですと、複数の相手にメッセージを
送信したい場合
● 送信側で、複数のメッセージを準備して、それぞれの相手に送信(複数回のMQPUTを実行).
● 送信側で、宛先を指定した配布リストを作成して、メッセージをMQPUT実行.
(この場合、アプリケーションが行うMQPUTは1度になります)
という具合に、明示的な処理を送信側アプリケーションに組み込む必要がありました。
これに対しPublish/Subscribeでは、Topicに対してPublisherから発信されたメッセージを
Copyright IBM Japan, Ltd
- 8 -
WebSphere MQ V7.0 Publish/Subscribe入門
そのTopicにSubscriptionしている稼働中のSubscriber全てに、ブローカーが配信するようになって
いますので、アプリケーションのロジックが簡単になります。
次に、Topicストリングを利用したPublish/Subscribeの動きを試してみましょう。
(注) amqssuba.c/amqspuba.cの確認と、実際にV7.0.1でamqssub.exe/amqspub.exeを稼働させた際の
動作に基づいて、以下の内容は記述しています。そのため、バージョン/リリース/メンテナン
ス・リリースの違いによっては、動作が異なる場合があります。
先ほど作成したTopicオブジェクト "Color"では、TOPICSTR属性として"/Rainbow"を使っています。
この"/Rainbow"にamqspub.exeを接続させますが、その一方amqssub.exeが別のTopicストリング、
例えば"/Rainbow/Purple"に接続したら、どうなるでしょうか。(大文字、小文字は区別されますの
で、間違えないようにして下さい)
amqssub.exeは、amqspub.exeが発信したメッセージを受信できないことがわかります。これは、
amqspub.exeは"Color"トピックに属する"/Rainbow"に対してメッセージを発信しているのに対して、
amqssub.exeが同じ"Color"トピックに属していますが、その「サブ・クラス」とも言える"/Rainbow/
Purple"に接続してメッセージを待っているからです。
Copyright IBM Japan, Ltd
- 9 -
WebSphere MQ V7.0 Publish/Subscribe入門
次に2つのamqssub.exeを起動し、片方は"/Rainbow"に、残りは"/Rainbow/Purple"に、それぞれ接続
させてみて下さい。(amqspub.exeは、再び"/Rainbow"に接続させます)
すると、amqspub.exeが発信したメッセージを
- "/Rainbow"に接続したamqssub.exeは、受け取っている.
- "/Rainbow/Purple"に接続したamqssub.exeは、何も受け取っていない
という結果になります。これは、Publisher側(amqspub.exe)は、あくまでも"/Rainbow"に対して
メッセージを発信しているだけなので、たとえ"/Rainbow"に属している"/Rainbow/Purple"で
あっても、「別のもの」として扱われているためです。
このようにPublish/Subscribeの機能を使うと、メッセージを選択的に受信する仕組み、例えば従来
MQMD.MsgIdやMQMD.CorrelIdを指定したMQGETを発行するなどの仕組みをアプリケーション内に実装
しなくとも、接続するTopicを選ぶことで必要と思われるメッセージを受信することができます。
Copyright IBM Japan, Ltd
- 10 -
WebSphere MQ V7.0 Publish/Subscribe入門
また送信側アプリケーション(つまり、Publisherアプリケーション)も、MQMD.MsgIdや
MQMD.CorrelIdをセットするコードを省くことも可能ですし、1メッセージをTopicに渡すだけで
そのTopicに接続している複数の受信側アプリケーション(Subscriberアプリケーション)に同じ
メッセージを渡すことができます。
Publish/Subscribeの機能は、これまで株価の配信、天気予報、スポーツ情報、最新ニュースなどの
情報配信システムの範囲にむいていると考えられてきましたが、利用法によっては、
- 複数サイトへのメッセージ発信. 例えば、実稼働系と災害対策用待機系への同時データ送信.
- 選択的な相手に対する、データ送受信.
などのシステムにも応用が利きます。
Copyright IBM Japan, Ltd
- 11 -
Fly UP