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