Comments
Description
Transcript
2章 Pub/Sub 目次
<WebSphere MQ V7 Update Workshop> 2章 Pub/Sub WebSphere MQ 2008/07 日本アイ・ビー・エム システムズ・エンジニアリング㈱ <WebSphere MQ V7 Update Workshop> 目次 Pub/Sub の仕組み Pub/Sub を構成する基本要素 アプリケーションの実装 アプリケーション開発 Hint & Tips Pub/Sub 関連機能の管理 分散 Pub/Sub セキュリティー管理 この資料に含まれる情報は可能な限り正確を期しておりますが、日本アイ・ビー・エム システムズ・エンジニアリング株式会社の正式なレビューを受け ておらず、当資料に記載された内容に関して当ワークショップの主催者である日本アイ・ビー・エム システムズ・エンジニアリング株式会社は何ら保証 するものではありません。 従って、この情報の利用またはこれらの技法の実施はひとえに使用者の責任において為されるものであり、資料の内容によって受けたいかなる被害 に関しても一切の保証をするものではありません。 当資料に記載された製品名または会社名はそれぞれの各社の商標または登録商標です。 2 <WebSphere MQ V7 Update Workshop> Pub/Subの仕組み 3 <WebSphere MQ V7 Update Workshop> WMQ での Pub/Sub の仕組み Pub/Sub 情報の提供者と受信者が、トピックを介して行うメッセージング形態の1つ 提供者と受信者間は、提供者⇒受信者の一方向通信 疎結合なメッセージ連携 共通の”話題”を購読要求した受信者に対して、送信側は受信者の数やロケーションを認識 せずにメッセージ配信が可能 MQ の配布リストの場合は、受信者の宛先などを知っている必要がある 情報提供者 情報受信者 パブリケーション トピック OLYMPIC.BEIJING. JUDO.RESULT サブスクライバー SUB1 サブスクライバー・キュー パブリッシャー パブリケーション サブスクライバー SUB2 Pub/Sub ブローカー パブリッシャー サブスクライバー SUB3 OIL.PRICE.SHIBUYA トピック サブスクライバー SUB1 SUB2 SUB3 トピック OLYMPIC.BEIJING.JUDO.RESULT OIL.PRICE.SHIBUYA OLYMPIC.BEIJING.JUDO.RESULT 4 サブスクリプション <WebSphere MQ V7 Update Workshop> Pub/Sub の構成要素 トピック 情報提供者 (パブリッシャー)と情報受信者(サブスクライバー)を連携する、共通の”話題” パブリケーション パブリッシャーとサブスクライバーがやり取りするメッセージ パブリッシャ−が 発信(送信) したパブリケーションを、ブローカーが 受信・配信 し、それをサブ スクライバーが 受信 パブリッシャー パブリッシャーは、トピックを宛先として情報を配信 サブスクライバー パブリケーションを受信するために、購読要求(サブスクリプション)を登録する サブスクライバー・キュー サブスクライバーがパブリケーションを受信するためのキュー サブスクリプション サブスクライバーがパブリケーションを受信するために登録する情報。トピックやサブスクライ バー・キューなどの情報を含む ブローカー パブリケーションの受信/配信と、パブリッシャー、サブスクライバーの管理を行う ※ ここではブローカーとは、MQ で Pub/Sub の機能を提供するエンジンとします。 Websphere Message Broker での機能を提供するということではありません。 5 <WebSphere MQ V7 Update Workshop> Pub/Sub の形態 パブリッシャーとサブスクライバーのメッセージ連携 1対1 1対n パブリッシャー パブリッシャー ブローカー ブローカー サブスクライバー n対1 パブリッシャー パブリッシャー ブローカー サブスクライバー ブローカー サブスクライバー ブローカー同士の接続形態 (分散 Pub/Sub) クラスター Pub/Sub パブリッシャー n対n サブスクライバー C詳細は後述 階層型 Pub/Sub サブスクライバー パブリッシャー ブローカー ブローカー サブスクライバー ブローカー ブローカー ブローカー 6 ブローカー <WebSphere MQ V7 Update Workshop> 基本的なプログラミング・モデル point-to-point と Pub/Sub アプリケーション point-to-point Pub/Sub パブリッシャー サブスクライバー MQCONN MQCONN MQOPEN MQSUB MQPUT MQGET MQCLOSE MQCLOSE MQCLOSE MQDISC MQDISC MQCLOSE MQCONN キューを オープン MQOPEN MQPUT トピックを オープン MQGET サブスクリプション登録、 および サブスクライバー・ キューのオープン サブスクリプションの クローズ サブスクライバー・ キューのクローズ MQDISC 7 <WebSphere MQ V7 Update Workshop> ブランク・ページ 8 <WebSphere MQ V7 Update Workshop> Pub/Subを構成する基本要素 9 <WebSphere MQ V7 Update Workshop> ブランク・ページ 10 <WebSphere MQ V7 Update Workshop> トピック トピック トピックAの サブスクリプション登録 パブリッシャーとサブスクライバーを紐付ける共通の話題 階層構造に構成することができる パブリッシャー トピックA MQCONN(QMGR) MQOPEN(トピックA) MQPUT(msg) MQCLOSE MQDISC トピック・ツリー サブスクライバー MQCONN(QMGR) MQSUB(トピックA) MQGET() MQCLOSE() MQCLOSE() MQDISC() ブローカー トピックAに関する 情報を発信 トピックAに関する 情報を受信 トピックを階層構造で表記したもの トピック・ツリーの各セグメントをノードという トピック・ストリング トピック・ツリー スラッシュを階層の区切り文字としてノードを表現する文字列 スラッシュで区切られた文字列の単位がノード パブリッシャーがパブリケーションを発信する宛先 サブスクライバーがパブリケーションを受信するために指定するもの トピック・ストリング (例:“48” のノードのトピック・ストリング) /olympic /beijing /athenae /judo /tennis /men /women /men /result /result /women /olympic/beijing/judo/women/result/48 /60 11 /66 /48 ノード /52 <WebSphere MQ V7 Update Workshop> トピック トピック・ストリング(続き) トピック・ストリングは、区切り文字を含め、1文字でも異なると別トピックとして扱われる 以下のトピック・ストリングはすべて異なるトピック 1. / olympic / beijing / judo 2. / olympic / beijing / judo / 3. olympic / beijing / judo 4. olympic / beijing / judo / 1. 2. 3. 4. /olympic /olympic olympic olympic /beijing /beijing /beijing /beijing /judo /judo /judo /judo / / / 12 空ノード <WebSphere MQ V7 Update Workshop> トピック・オブジェクト トピック・ストリングをキュー・マネージャー・オブジェクトとして定義し、任意の名称を付け ることが可能 MQSCコマンドで、トピック・オブジェクトを定義 アプリケーションから宛先トピック・ストリングを隠蔽 トピックにセキュリティーの設定や属性を持たせることが可能 C詳細は後述 [作成例] DEFINE TOPIC(TENNIS.WOMEN.RESULT) TOPICSTR( /olympic/beijing/tennis/women/result ) ※ トピック・ストリングは、/ から始まるのが推奨 ノードを生成するために、未定義部分のトピックは内部的に自動生成される 自動定義されるトピック トピック・ツリー –/olympic/beijing –/olympic/beijing/tennis –/olympic/beijing/tennis/women /olympic result ※ノード “/olympic” は、”/athene” を作成時に 自動定義済みとする 未定義ノード 定義済み /beijing /athene /tennis /women TENNIS.WOMEN. RESULT 13 /result <WebSphere MQ V7 Update Workshop> トピックの指定 パブリッシャー/サブスクライバーによるトピック指定方法は3通り トピック・オブジェクト名を指定 トピック・オブジェクトに定義されたトピック・ストリングが設定される トピック・ストリングで直接設定 上記2つの組み合わせ トピック・オブジェクトに定義されているトピック・ストリング TOPIC: JUDO TOPICSTR: ‘/olymic/beijing/judo’ 組み合わせによる指定 トピック・オブジェクト名 TOPIC: JUDO + 指定したトピック・ストリングに解決 直接指定 + トピック・オブジェクト /olympic ‘men/result/60’ /beijing 組み合わせた結果 ‘/olymic/beijing/judo/men/result/60’ 14 /judo /60 /men /women /result /result /66 /48 /52 /athenae /tennis /men /women <WebSphere MQ V7 Update Workshop> 組み合わせによるトピック指定時の考慮点 直接指定するトピック・ストリングの先頭には区切り文字(/) を付けない トピック・オブジェクトによって解決されるトピック・ストリングとの間に、区切り文字(/)が挿入され るため ※ ’/’ もノードとして作成される # トピック・オブジェクトのTOPICSTR属性 直接指定 解決されるトピック・ストリング 1 olympic/beijing/judo /men/reuslt/60 /olymic/beijing/judo//men/result/60 2 olympic/beijing/judo/ men/result/60 /olymic/beijing/judo//men/result/60 3 olympic/beijing/judo/ /men/result/60 /olymic/beijing/judo///men/result/60 1 2 /olympic 3 /olympic /olympic /beijing /beijing /beijing /judo /judo /judo / / / /men /men / /result /result /men /60 /60 /result トピック・オブジェクト / ’/’ もノードとして 作成される 空ノード /60 15 <WebSphere MQ V7 Update Workshop> トピックの指定 ワイルド・カードを用いた曖昧トピックの作成が可能 サブスクライバーのみ使用可能 使用可能なワイルド・カード # (マルチ・レベル) + (シングル・レベル) ※ *、? は、MQ V6 でのみ有効 例 / /olympic/beijing/judo/women/# ・・・ 対象:赤枠のノード /olympic/beijing/#/men/result ・・・ 対象:橙枠のノード /olympic/beijing/+/men ・・・ 対象:青枠のノード 例えば/olympic/beijing/#/men/resultであれば、 /olympic/beijing/tennis/men/result や、 /olympic/beijing/judo/men/result/60 などに 発信されたパブリケーションを受信することができる 60 16 トピック・ツリー olympic beijing athenae judo tennis men women men women result result result result 66 48 52 <WebSphere MQ V7 Update Workshop> パブリッシャー パブリッシャーはトピックに対してパブリケーションを送信するアプリケーション トピックに対してMQOPEN を実行 MQMDやトピック・オブジェクトにパブリケーションの属性を指定 MQPMOで配信オプションを設定 MQPUT でパブリッシュ パブリッシャー MQCONN トピックを オープン MQOPEN MQPUT パブリケーションの 属性を設定 MQMD パブリケーション送信 MQCLOSE MQDISC 17 <WebSphere MQ V7 Update Workshop> パブリケーション 2つのパブリケーション・タイプ アプリケーション要件に応じたパブリケーションをMQPMOで選択可能 ノーマル・パブリケーション(イベント型) パブリッシュした時にサブスクライブしている相手に送信する 継続的に配信されるが、個々には論理的に独立したメッセージ群 株価の売買情報、ブログの更新情報など パブリケーションは、ブローカーによって保管されない パブリッシュ時点で登録されているサブスクライバーにのみ配信される MQでのデフォルト・パブリケーション リテイン・パブリケーション(ステート型) サブスクライブ登録やサブスクライバーの稼動に関わらず、トピックの最新情報を送信する 事象の状態を変化を示すもので、時々刻々更新/置換される情報 株価、室内の温度/湿度など パブリケーションは、ブローカーによって保管される パブリッシュ後に登録したサブスクライバーにも最新のパブリケーションが配信される MQではステート型のパブリケーションをリテイン・パブリケーション(リテイン・メッセージ) という 18 <WebSphere MQ V7 Update Workshop> リテイン・パブリケーション パブリッシャーによって送信されたリテイン・ パブリケーションは、システム・キューに保管さ れ、適宜サブスクライバーに配信される 保管先: SYSTEM.RETAINED.PUB.QUEUE 通常、1トピックにつき有効なリテイン・パブリケーションは1つ サブスクライバー登録時に、既存リテイン・パブリケーション受信の有無を選択できる 送信済みの最新リテイン・パブリケーションを受信(デフォルト) 同一トピックに対して複数リテイン・パブリケーションが存在していても、最新のもののみ配信される サブスクライバー ④ 配信 ① サブスクリプション登録 ⑤ サブスクリプション登録 パブリッシャー サブスクライバー ブローカー ② パブリッシュ retain ⑥ 配信 ③ 保管 non-retain SYSTEM.RETAINED. PUB.QUEUE 19 <WebSphere MQ V7 Update Workshop> パブリケーションの属性と配信フォーマット パブリケーションにも永続性などのMQMD属性を設定することが可能 パブリッシャーが送信時にMQMD構造体を使用して設定 <代表的なMQMD属性> Expiry、Persistence、CodedCharSetId、Priority・・・など 配信するパブリケーションにPub/Subコマンドを含むか指定可能 C詳細は後述 MQMDとは別に、Pub/Subコマンドを任意のヘッダーに添付する 選択可能なヘッダーの種類 –なし(デフォルト) –RFH1 –RFH2 –PCF RFH2ヘッダー付きパブリケーション 00000000: 00000010: 00000020: 00000030: 00000040: 00000050: 00000060: 00000070: 00000080: 5246 0000 0000 6D6D 6F6D 6C79 7564 3E20 6D73 4820 03AF 04B8 616E 6D61 6D70 6F3C 2020 6720 0000 4D51 0000 643E 6E64 6963 2F54 7468 6F66 0002 5354 004C 5075 3E3C 2F62 6F70 6973 206A 0000 5220 3C70 626C 546F 6569 6963 2069 7564 0074 2020 7363 6973 7069 6A69 3E3C 7320 6F2E 0000 0000 3E3C 683C 633E 6E67 2F70 7468 Pub/Sub属性の 格納場所を指定 サブスクライバー・ サブスクライバー キュー パブリッシャー ここでMQMD を設定 ブローカー 20 0111 0000 436F 2F43 2F6F 2F6A 7363 6520 'RFH .......t....' '...ッMQSTR ....' '...ク...L<psc><Co' 'mmand>Publish</C' 'ommand><Topic>/o' 'lympic/beijing/j' 'udo</Topic></psc' '> this is the ' 'msg of judo. ' <WebSphere MQ V7 Update Workshop> サブスクライバー サブスクライバーはトピックに対して送信されたパブリケーションを受信するアプリケーション MQSUB を実行し、トピックなどのサブスクリプションを登録 MQSD (MQ Subscription Descriptor) によってサブスクリプションの属性を設定する MQGET でパブリケーションの受信 サブスクリプションを登録すると・・・ ブローカーによってサブスクリプション情報が保管される 実態は、SUB オブジェクト サブスクライバー ブローカーが内部的に生成 サブスクリプションの 属性を設定 MQCONN ユーザーが明示的に SUB オブジェクトを定義し、 サブスクリプション登録することも可能 MQSD MQSUB サブスクリプション 登録、および サブスクライ バー・キューの オープン サブスクリプション属性の照会 MQGET MQSC コマンドでSUBオブジェクトの確認が可能 CSUBオブジェクト属性に関しては後述 MQCLOSE MQCLOSE サブスクリプションの クローズ サブスクライ バー・キュー のクローズ MQDISC 21 <WebSphere MQ V7 Update Workshop> サブスクリプション 2つのサブスクリプション・タイプ アプリケーション要件に応じたサブスクリプションをMQSUB時に選択可 継続サブスクリプション アプリケーションの起動をまたがって、サブスクリプションを保存しておくことができる アプリケーションが停止中でもパブリケーションをサブスクリプション・キューに保管しておくことが可能 再開するために、ユニークなサブスクリプション名をもつ必要がある 継続サブスクリプションを破棄する場合は、MQCLOSE時にMQCO_REMOVE_SUBを指定 非継続サブスクリプション アプリケーションが終了すると、サブクスリプションは破棄される デフォルトのサブスクリプション・タイプ 継続サブスクリプションの例 1. サブスクリプションの登録 2. パブリケーションの配信 ① サブスクリプション登録 サブスクライバー パブリッシャー サブスクライバー 停止中 ブローカー ブローカー サブスクライバー・ キュー サブスクライバー・ キュー ②アプリケーション切断 ③ 配信 22 ④ 配信 <WebSphere MQ V7 Update Workshop> サブスクライバー・キュー サブスクライバーがパブリケーションを受け取るためのキュー システム要件に応じて、サブスクライバー登録時に、サブスクライバー・キュー・タイプを指定可 ブローカーが管理するサブスクライバー・キュー(managed) ブローカーが生成や削除などの管理を行う サブスクリプション登録時: モデル・キューを使用してサブスクライバーごとに作成 サブスクリプション破棄時: 関連するサブスクライバー・キューを削除 –一律キューに滞留していたメッセージは削除される ユーザーが提供するサブスクライバー・キュー(provided) ユーザーが作成や削除などの管理を行う 作成/削除等のキュー管理はユーザーが行う必要がある サブスクライバー・キュー –作成は、サブスクリプション登録前に必要 –サブスクリプション登録前にMQOPENが必要 –SUB オブジェクトを明示定義する場合は、DEST属性に指定 サブスクライバー ブローカー MQGET managed? provided? 23 <WebSphere MQ V7 Update Workshop> リテイン・パブリケーションをサブスクライブするタイミング デフォルトでは、パブリケーションが発行されると随時サブスクライバー・キューに配信 リテイン・パブリケーションは任意のタイミングで、サブスクライバー・キューに配信することも可能 継続サブスクリプションなどで、長期間アプリケーションが停止しているときにサブスクライバー・キューに滞 留させない 任意のタイミングでパブリケーションを受信 MQSUBRQ にて、最新リテイン・パブリケーションをサブスクライバー・キューに配信要求する 要求型サブのアプリケーション・シーケンス MQCONN 処理の流れ ② サブスクリプション登録 リクエスト型 サブスクライバー MQSUB MQSD MQSRO ③ 要求 MQSUBRQ リクエスト・サブの 属性を設定 パブリッシャー MQGET ④ 配信 ブローカー MQCLOSE ① パブリッシュ retain MQCLOSE 24 MQDISC 最新リテイン・パブリケー ションの配信要求 <WebSphere MQ V7 Update Workshop> Pub/Sub のまとめ MQ Pub/Sub で知っておくべきキーワード パブリケーション・タイプ ノーマル/リテイン サブスクリプション・タイプ 継続/非継続 サブスクリプションを受け取るタイミング 随時/要求時 サブスクライバー・キュー・タイプ managed/provided 25 <WebSphere MQ V7 Update Workshop> ブランク・ページ 26 <WebSphere MQ V7 Update Workshop> アプリケーションの実装 27 <WebSphere MQ V7 Update Workshop> パブリッシャー トピックに対して MQOPEN し、MQPUT でパブリケーションを送信する MQOD構造体にトピックを設定 MQPMO にパブリケーション属性を設定 MQPUT でパブリケーション送信 ※ MQMD構造体にパブリケーション属性を設定することも可能 通常のメッセージに設定する属性と 同じ (永続性、有効期限など) パブリッシャー ブローカー MQCONN(QmgrName, Hconn, CC, RC); MQOD にトピックを設定 OpenOption の設定 MQOPEN(Hconn, MQOD, OpenOptions, Hobj, CC, RC); MQPMO でパブリッシュ・タイプを設定 MQPUT(Hconn, Hobj, MQOD, MQPMO, BuffLen, Buffer, CC, RC); MQCLOSE(Hconn, Hobj, Options, CompCode, Reason); MQDISC(Hconn, CompCode, Reason); パブリッシャー・アプリケーションのシーケンス例 28 <WebSphere MQ V7 Update Workshop> トピックの設定 トピックを MQOD構造体に設定 MQOD Version 4 を指定 ObjectType に MQOT_TOPIC を設定 トピック・オブジェクト名の指定 トピック・ストリングの指定 トピック・オブジェクト名とトピック・ストリングを両方指定する場合の注意点は「組み合わせによるトピック の指定時の考慮点」のページを参照 例: トピック ‘/olympic/beijing/judo/men/result/60’ に対して パブリケーションを送信する場合のトピックの指定 (JUDO.RESULTトピックを使用するとする) TOPIC定義 DEFINE TOPIC(JUDO.RESULT) TOPICSTR(‘/olympic/beijing/judo/men/result’) MQODの設定 od.ObjectType = MQOT_TOPIC; strncpy(od.ObjectName, “JUDO.RESULT”, (size_t) MQ_TOPIC_NAME_LENGTH); od.ObjectString.VSPtr = “60”; od.ObjectString.VSLength = (MQLONG)strlen(“60”); トピック・オブジェクト 名の指定 トピック・ストリングの指定 29 <WebSphere MQ V7 Update Workshop> パブリケーション・タイプの選択 パブリケーション・タイプの選択 リテイン・パブリケーションを選択する場合は、MQPMO_RETAIN を設定 mqpmo.Options = MQPMO_RETAIN; ノーマル・パブリケーションを選択する場合は、特に設定の必要はない 30 <WebSphere MQ V7 Update Workshop> サブスクライバー MQSUB でサブスクリプションを登録し、MQGET でパブリケーションを受信する サブスクライバー属性は、MQSD構造体(MQ Subscription Descriptor)やMQSD.Options(MQ Subscription Options) で設定 <登録する主な内容と主な選択肢> サブスクライブするトピック MQSD.ObjectString, MQSD.ObjectName サブスクライバー名 MQSD.SubName サブスクリプション登録操作 MQSO_CREATE, MQSO_RESUME, MQSO_ALTER サブスクリプション・タイプ MQSO_NON_DURABLE, MQSO_DURABLE など MQCLOSEは、サブスクリプションとサブスクライバー・キューに対してそれぞれ必須 サブスクライバー ブローカー サブスクリプション登録 サブスクリプションのクローズ サブスクライバー・キューのクローズ MQCONN(QmgrName, Hconn, CC, RC); MQSD でサブスクリプション属性の設定 MQSUB(Hconn, MQSD, Hobj, Hsub, CC, RC); MQGMO の設定 MQGET(Hconn, Hobj, MQOD, MQGMO, BuffLen, Buffer, CC, RC); MQCO でサブスクリプションのクローズオプションを設定 MQCLOSE(Hconn, Hsub, MQCO, CC, RC); MQCO の設定 MQCLOSE(Hconn, Hobj, MQCO, CC, RC); MQDISC(Hconn, CC, RC); サブスクライバー・アプリケーションのシーケンス例 31 <WebSphere MQ V7 Update Workshop> サブスクライブするトピックの設定 サブスクライブするトピックの設定 サブスクリプションを新規作成する場合は設定が必須 構造体は異なるが、設定方法はパブリッシャーと同じ に トピック・オブジェクト名を設定 MQSD ObjectString にトピック・ストリングを設定 MQSD.ObjectName トピック・オブジェクト名とトピック・ストリングを両方指定する場合の注意点は「組み合わせによ るトピックの指定時の考慮点」のページを参照 例: トピック ‘/olympic/beijing/judo/men/result/60’ に対して サブスクリプションを登録する場合のトピックの指定 (JUDO.RESULTトピックを使用するとする) TOPIC定義 DEFINE TOPIC(JUDO.RESULT) TOPICSTR(‘/olympic/beijing/judo/men/result’) MQSDの設定 strncpy(mqsd.ObjectName, “JUDO.RESULT”, (size_t) MQ_TOPIC_NAME_LENGTH); トピック・オブジェクト名の指定 mqsd.ObjectString.VSPtr = “60”; mqsd.ObjectString.VSLength = (MQLONG)strlen(“60”); トピック・ストリングの指定 32 <WebSphere MQ V7 Update Workshop> サブスクライバー名の設定 サブスクライバー名の設定 継続サブスクリプションを扱う場合は設定が必須 非継続では設定は任意 MQSD 構造体の SubName にサブスクライバー名の設定を行う mqsd.SubName.VSPtr = “MY.SUBSCRIPTION”; mqsd.SubName.VSLength = (MQLONG)strlen(“MY.SUBSCRIPTION”); 33 <WebSphere MQ V7 Update Workshop> サブスクリプション登録操作の選択 サブスクリプションを新規作成するか、もしくは再開するかを選択 MQSD構造体のOptionsに設定 設定可能なオプションは3つ 組み合わせて指定することも可能 組み合わせた指定例 mqsd.Options = MQSO_CREATE | MQSO_RESUME; オプション 説明 MQSO_CREATE サブスクリプションが存在しない場合は、新規作成 MQSO_RESUME 既存のサブスクリプションを再開 MQSO_ALTER MQSDの設定にしたがってサブスクリプションを変更 MQSO_CREATE + MQSO_RESUME サブスクリプションが存在しない場合は新規作成。 ある場合は既存のサブスクリプションを再開 MQSO_CREATE + MQSO_ALTER MQSDの設定にしたがってサブスクリプションを変更して、 既存のサブスクリプションを再開 MQSO_RESUME MQSO_ALTER サブスクリプションが存在しない場合は新規作成。 ある場合はMQSDの設定にしたがってサブスクリプションを変更して、 既存のサブスクリプションを再開 34 <WebSphere MQ V7 Update Workshop> サブスクリプション・タイプの選択 サブスクリプション・タイプの選択 継続サブスクリプション MQSD構造体のOptionsに設定 mqsd.Options = MQSO_DURABLE; 非継続サブスクリプションを選択する場合は、特に設定の必要はない 35 <WebSphere MQ V7 Update Workshop> ブランク・ページ 36 <WebSphere MQ V7 Update Workshop> (参考)MQSD ‒ MQ Subscription Descriptor ‒ パラメーター 型 説明 StrucId MQCHAR4 構造体ID Version MQLONG 構造体のバージョン Options MQLONG オプション ObjectName MQCHAR48 トピック・オブジェクト名 代替ユーザーID AlternateUserId AlternateSecurityId MQBYTE40 代替セキュリティーID SubExpiry MQLONG サブスクリプションの有効期限 ObjectString MQCHARV トピック・ストリング SubName MQCHARV サブスクリプション名 SubUserData MQCHARV 受信するパブリケーションに添付するメッセージ・プロパティ SubCorrelId MQBYTE24 サブスクライバーのCorrelIdを設定 PubPriority MQLONG パブリケーションの優先順位 PubAccountingToken MQBYTE32 パブリケーションのアカウティング・トークン PubAppIdentityData MQCHAR32 パブリケーションの識別データ SelectionString MQCHARV セレクターの条件 SubLevel MQLONG サブスクリプション・レベル ResObjectString MQCHARV 解決されたトピック・ストリング 37 <WebSphere MQ V7 Update Workshop> (参考) MQSO ‒ MQ Subscription Option ‒ パラメーター 説明 MQSO_NONE なし MQSO_NON_DURABLE 非継続サブスクリプション MQSO_READ_AHEAD_AS_Q_DEF キュー属性に従ってメッセージの先読み MQSO_ALTER サブスクリプションの変更 MQSO_CREATE サブスクリプションの作成 MQSO_RESUME サブスクリプションの再開 MQSO_DURABLE 継続サブスクリプション MQSO_GROUP_SUB グループ・サブスクリプション指定 MQSO_MANAGED サブスクライバー・キューに MANAGED キューを使用 MQSO_SET_IDENTITY_CONTEXT コンテキスト情報を設定 MQSO_FIXED_USERID サブスクリプションを使用するユーザーIDを固定 MQSO_ANY_USERID サブスクリプションを使用するユーザーIDを限定しない MQSO_PUBLICATION_ON_REQUEST リクエスト・ベースのサブスクライバー MQSO_FAIL_IF_QUIESCING キュー・マネージャーが停止中の場合処理を失敗させる MQSO_ALTERNATE_USER_AUTHORITY ユーザー権限の変更 MQSO_WILDCARD_CHAR ワイルド・カードを文字として扱う MQSO_WILDCARD_TOPIC ワイルド・カードをあいまい文字として扱う MQSO_SET_CORREL_ID Correl IDを設定 MQSO_SCOPE_QMGR サブスクリプションの範囲をキュー・マネージャーに限定 MQSO_NO_READ_AHEAD パブリケーションを先読みしない MQSO_READ_AHEAD パブリケーションを先読みする 38 <WebSphere MQ V7 Update Workshop> サブスクリプション登録 サブスクリプション登録 MQSUB でサブスクリプションを登録 サブスクリプション・ハンドルと、サブスクライバー・キューのキュー・ハンドルが返される MQSUB (Hconn, SubDesc, Hobj, Hsub, CompCode, Reason); パラメーター 説明 Input/Output Hconn キュー・マネージャー・ハンドル I SubDesc サブスクリプション構造体 I/O Hobj サブスクライバー・キュー・ハンドル I/O Hsub サブスクリプション・ハンドル O CompCode 完了コード O Reason 理由コード O 39 <WebSphere MQ V7 Update Workshop> サブスクリプションのクローズ処理 サブスクリプションのクローズ処理 サブスクリプションを継続するか破棄するかを、MQCLOSEオプションにて設定 継続サブスクリプションの場合 継続する場合は、MQCO_KEEP_SUB を設定 (継続サブスクリプションのデフォルト) mqco.Options = MQCO_KEEP_SUB; 破棄する場合は、MQCO_REMOVE_SUB を設定 mqco.Options = MQCO_REMOVE_SUB; 非継続サブスクリプションの場合 MQCLOSE オプションに、MQCO_REMOVE SUB を設定 非継続サブスクリプションの場合、MQCO_KEEP_SUB mqco.Options = MQCO_REMOVE_SUB; (デフォルト) 40 は指定できない <WebSphere MQ V7 Update Workshop> 要求型サブスクリプション アプリケーション任意のタイミングで、サブスクライバー・キューへの最新リテイン・パブリケー ション配信を要求するサブスクリプション MQSD.Options に MQSO_PUBLICATION_ON_REQUEST を指定してサブスクリプ ション登録 MQSUBRQ でサブスクライバー・キューへの配信要求 パブリケーションを受信するには、受信したいタイミングで、明示的なMQSUBRQの実行が必要 それ以外はデフォルトのサブスクリプションと同じ サブスクライバー ブローカー MQCONN(QmgrName, Hconn, CC, RC); MQSD でサブスクリプション属性の設定 MQSUB(Hconn, MQSD, Hobj, Hsub, CC, RC); Action、サブスクライバー要求オプションの設定 MQSUBRQ(Hconn, Hsub, Action, SubRqOpts, CC, RC); MQGMO の設定 MQGET(Hconn, Hobj, MQOD, MQGMO, BuffLen, Buffer, CC, RC); MQCO でサブスクリプションのクローズオプションを設定 MQCLOSE(Hconn, Hsub, MQCO, CC, RC); MQCO の設定 MQCLOSE(Hconn, Hobj, MQCO, CC, RC); MQDISC(Hconn, CC, RC); 41 サブスクリプション登録 サブスクリプション配信要求 サブスクリプションのクローズ サブスクライバー・キューのクローズ <WebSphere MQ V7 Update Workshop> (参考) 要求型サブスクリプション関連MQI MQSUBRQ – MQ Subscription Request – MQSUBRQ (Hconn, Hsub, Action, SubRqOpts, CompCode, Reason); パラメーター 説明 Input/Output Hconn キュー・マネージャー・ハンドル I Hsub サブスクリプション・ハンドル I Action MQSR_ACTION_PUBLICATION I SubRqOpts サブスクリプション・オプション I CompCode 完了コード O Reason 理由コード O MQSRO – MQ Subscription Request Option – パラメーター 型 説明 StrucId MQCHAR4 構造体ID Version MQLONG 構造体のバージョン Options MQLONG オプション NumPubs MQLONG 受信するパブリケーション数 42 <WebSphere MQ V7 Update Workshop> サンプル・アプリケーション パブリッシャー amqspub 配置ディレクトリー /usr/mqm/samp/bin (UNIX系) <導入ディレクトリ>¥tools¥c¥Samples¥Bin (Windows) 構文 [ ]内は、オプション amqspub トピック・ストリング キュー・マネージャー名 [ MQPMO ] 実行例 リテイン・パブリケーションを配信 amqspub /olympic/beijing/judo/women/result/48 QM1 2097152 MQPMO_RETAIN: 2,097,152 実行結果 $ amqspub /olympic/beijing/judo/women/result/48 QM1 2097152 Sample AMQSPUBA start publish options are 2097152 target topic is /olympic/beijing/judo/women/result/48 RYOKO TANI: GOLD Sample AMQSPUBA end 43 <WebSphere MQ V7 Update Workshop> サンプル・アプリケーション サブスクライバー amqssub 配置ディレクトリー /usr/mqm/samp/bin (UNIX系) <導入ディレクトリ>¥tools¥c¥Samples¥Bin (Windows) 構文 [ ]内は、オプション amqssub トピック・ストリング キュー・マネージャー名 [ MQSO ] 実行例 リテイン・パブリケーションを配信 amqspub /olympic/beijing/judo/women/result/48 QM1 ※ amqssub は、managed サブスクライバー・キューを使った非継続サブスクリプションを作成 実行結果 $ /usr/mqm/samp/bin/amqssub /olympic/beijing/judo/women/result/48 QM1 Sample AMQSSUBA start Calling MQGET : 30 seconds wait time message <RYOKO TANI: GOLD> Calling MQGET : 30 seconds wait time no more messages Sample AMQSSUBA end 44 <WebSphere MQ V7 Update Workshop> アプリケーション開発 Hint&Tips 45 <WebSphere MQ V7 Update Workshop> パブリケーションの順序保証、グループ化 ブローカーは、メッセージを受信した順序でサブスクライバーに配信を行う point-to-point でのメッセージング同様、以下のようなケースでは配信順序保証なし クラスター環境などで宛先までの経路が複数ある場合 デッド・レター・キューを使用している場合 プライオリティーを使用している場合 パブリッシャー MQPUT グループ・メッセージのサポートはなし 46 ③ ② ③ ② ① ブローカー ① MQGET サブスクライバー・ キュー <WebSphere MQ V7 Update Workshop> パブリケーションのUOWと配信ポリシー パブリケーションは複数のUOWをまたがって配信される MQPUTから・・・ ローカルのサブスクライバー・キューまで トランスミッション・キューまで(サブスクライバーがリモートにある場合) ブローカーとサブスクライバー・キュー/トランスミッション・キューが含まれるUOWで、メッ セージの配信が失敗した場合、それをエラーとして扱うか配信ポリシーを指定できる エラーとした場合は、パブリケーションは配信されずに破棄される UOWにパブリッシャーが含まれている場合は、アプリケーションにエラーが返る(MQRC2502) エラーとしない場合は、配信可能なキューにのみパブリケーションが配信される パブリケーションの配信ポリシーの種類 ALL ALLDUR ALLAVAIL UOW UOW UOW UOW パブリッシャー mca MQPUT dur ブローカー ブローカー XMITQ 詳細は次ページへ non-dur サブスクライバー・ キュー UOW サブスクライバー・キュー dur non-dur 47 <WebSphere MQ V7 Update Workshop> パブリケーションのUOWと配信ポリシー ALL UOW内の宛先へのPUTにエラーが発生しなければ、パブリケーションを配信 1つでも失敗するとエラーとし、配信されない ALLDUR 継続サブスクリプション向けの配信が正常終了であれば配信 1つでも継続サブスクリプションへの配信に失敗するとエラー 非継続サブスクリプションへの配信失敗はエラーとしない ALLAVAIL 配信の失敗はエラーとしない パブリケーションの配信ポリシーは、トピック・オブジェクトのPSMSGDLV/NPSMSGDLV属性 に設定 PSMSGDLV パーシステント・パブリケーション用 NPSMSGDLV ノン・パーシステント・パブリケーション用 UOW パブリッシャー ブローカー MQPUT 配信ポリシー 非継続サブスクライバーのいずれかに障害発生 継続サブスクライバーのいずれかに障害発生 ALL 配信されない 配信されない ALLDUR 正常稼動しているサブスクライバーにのみ配信 配信されない ALLAVAIL 正常稼動しているサブスクライバーにのみ配信 正常稼動しているサブスクライバーにのみ配信 48 XMITQ dur non-dur <WebSphere MQ V7 Update Workshop> サブスクライバーの負荷分散 サブスクライバーを論理的な1つのグループにすることで、1つのパブリケーションを複数サ ブスクライバーで処理をさせることができる 通常、登録サブスクライバーの数だけメッセージが配信される DEF TOPIC(JUDO.M.RESULT) TOPICSTR(‘/olympic/beijing/judo/men/result/#’) グループ化の条件 同じサブスクライバー・キュー(provided) を使用 トピック・ストリングにワイルド・カードを使用 1つだけ配信 /olympic/beijing/judo/m en/result/60 サブスクライバー MQGET アプリケーションで必要な設定 パブリッシャー サブスクリプション・オプションの設定 MQPUT –MQSO_GROUP_SUB –MQSO_SET_CORREL_ID グループで共通の SubCorrelId を指定 ユニークな SubName の付与 ブローカー JUDO.M.RESULT MQGET JUDO.M.RESULT MQGET JUDO.M.RESULT 通常は3箇所とも配信される 注意 1つのアプリケーション内でパブリッシュとサブスクライブを行わない –やむなく行う場合は、配信時に MQSO_NOT_OWN_PUB を指定しない グループ登録後、SubCorrelIdの変更はできない 49 <WebSphere MQ V7 Update Workshop> パブリケーション/サブスクリプション/トピックの有効期限 パブリケーション、サブスクリプション、トピックに有効期限を設定し、期限を超えたものを 自動削除させる サブスクライバー・キューに配信されたパブリケーションの有効期限 MQMD の Expiry で設定 (1/10秒単位) 継続サブスクリプション用のサブスクライバー・キューで、長期に渡って受信されないパブリケーションを自 動削除するなどに有効 サブスクリプションの有効期限 MQSD.SubExpiry で設定 (1/10秒単位) managed の場合、サブスクリプション削除のタイミングで一緒に削除される サブスクライバー・キューが 長期に渡って再開されずに残っている継続サブスクリプションなどを自動削除するなどに有効 トピックの有効期限 (※現在は使用不可) 自動作成されたノードの有効期限 –QMGR の TREELIFE 属性で設定 50 <WebSphere MQ V7 Update Workshop> point-to-pointアプリケーションとの連携例 既存のMQPUTアプリケーションとの連携 宛先をトピックとした別名キューを用意し、送信アプリケーションからは透過的にトピックに送信 TOPIC オブジェクト DEF TOPIC(JUDO.RESULT) + TOPICSTR(‘/olympic/beijing/judo/men/result’) 既存送信アプリケーション サブスクライバー MQOPEN ( LQ ) MQPUT() MQSUB ( JUDO.RESULT ) MQGET() ブローカー DEF QA( LQ ) + TARGTYPE(TOPIC) + TARGET(JUDO.RESULT) 既存のMQGETアプリケーションとの連携 既存アプリがMQOPENしているキューをサブスクライバー・キューに指定してメッセージ受信 SUBオブジェクト TOPIC オブジェクト DEF TOPIC(JUDO.RESULT) + TOPICSTR(‘/olympic/beijing/judo/men/result’) パブリッシャー DEF SUB(MY.SUB) + TOPICOBJ(JUDO.RESULT) + DEST( LQ ) 既存受信アプリケーション MQOPEN ( JUDO.RESULT ) MQPUT() MQOPEN ( LQ ) MQGET() ブローカー LQ 51 <WebSphere MQ V7 Update Workshop> MQ V7 Pub/Sub と他ブローカーとの連携 MQ V7では、Pub/Sub コマンドをメッセージに含めて送信するブローカーとの互換性を 提供 Pub/Sub コマンドが格納される場所 1. なし 2. RFH1ヘッダー 3. RFH2ヘッダー 4. PCFヘッダー 設定方法 SUB オブジェクトの PSPROP属性で設定 属性 NONE RFH1 RFH2 PCF PSPROP(NONE) PSPROP(MSGPROP) PSPROP(RFH2) PSPROP(COMPAT) デフォルトはMSGPROP –7月2日現在、マニュアル にはデフォルトがPSPROP(NONE)と記載されていますが、DOC APARが作成されており、MSGPROPに記載変更されるようです 52 <WebSphere MQ V7 Update Workshop> サブスクライバー・キューの共用 サブスクライバー・キューを複数サブスクライバーで共有することが可能 サブスクライブ登録時に、同じ provided キューを指定して共有 サブスクライバー (SubCorrelId: 1234) MQCONN(QMGR) MQOPEN(Q.SUB1) MQSUB(トピックA) (MQMD の設定) CorrelId = MQSD.SubCorrelId; (MQGMOの設定) CorrelId: 0x:5678 パブリッシャー MatchOptions = MQMO_MATCH_CORREL_ID; MQCONN(QMGR) MQOPEN(トピックA) MQPUT(msg) MQCLOSE MQDISC ブローカー Q.SUB1 MQGET() MQCLOSE MQDISC サブスクライバー (SubCorrelId: 5678) MQCONN(QMGR) MQOPEN(Q.SUB1) MQSUB(トピックA) (MQMD の設定) CorrelId = MQSD.SubCorrelId; (MQGMOの設定) CorrelId: 0x:1234 MatchOptions = MQMO_MATCH_CORREL_ID; MQGET() MQCLOSE MQDISC 考慮点 サブスクライバーが同じトピックで登録していると、パブリケーションが複数サブスクライバー・ キューに配信されるので、パブリケーションを識別するためにMQMD.CorrelIdを利用する 53 <WebSphere MQ V7 Update Workshop> サブスクライバー・キューの共用 つづき 識別してパブリケーションを受信する手順 1.サブスクリプション登録時に、以下のいずれかの方法で SubCorrelId を設定 キュー・マネージャーによる採番 (デフォルト) MQSD.SubCorrelId に明示指定 2.SubCorrelIdの値をキーとして、MQMD.CorrelId指定でパブリケーションをMQGET パブリケーションの CorrelId には、サブスクライバーの SubCorrelId が設定されている MQGMO.MatchOptions に MQMO_MATCH_CORREL_ID を設定 コーディング・シーケンス MQMD.CorrelId MQGMO.MatchOptions MQGET(); = MQSD.SubCorrelId; += MQMO_MATCH_CORREL_ID; 54 <WebSphere MQ V7 Update Workshop> パブリケーションの配信制御 パブリケーションやサブスクリプションにレベルを設定することで、アプリケーション・レベルで パブリケーションの配信を制御することが可能 パブリケーション・レベルは、MQPMO.PubLevel で設定 設定値: 0∼9 (デフォルト 9) サブスクリプション・レベルは、MQSD.SubLevel で設定 設定値: SUB 0∼9 (デフォルト 1) オブジェクトでも設定可能 サブスクライバーが受信するためには、以下2つの条件に当てはまる必要がある PUBLEVELよりもSUBLEVELが低いこと 上記条件に当てはまるサブスクライバーの中で一番高い SubLevel に設定 配信されたパブリケーションを下位サブレベルにも配信したい場合は、受信したサブスクライ バーが、SUBLEVELよりもPUBLEVELを下げて再送信する PUBLEVEL 9 ② パブリッシャー ① MQPUT サブスクライバー SUBLEVEL7 PUBLEVEL6 でPub ブローカー ③ SUBLEVEL5 55 <WebSphere MQ V7 Update Workshop> その他 サブスクライバーにどのブローカーから配信されたパブリケーションであるかを隠蔽したい場 合 MQPMO_SUPPRESS_REPLYTO を設定してパブリッシュを行う ブローカーは、MQMD の ReplyToQMgr をブランクにしてパブリケーションを配信 –ReplyToQ もブランクにされる 同一コネクション・ハンドル内で自分が配信したパブリケーションを受信したくないとき MQSO_NOT_OWN_PUB を設定してサブスクリプションを登録 56 <WebSphere MQ V7 Update Workshop> Pub/Sub関連機能の管理 57 <WebSphere MQ V7 Update Workshop> ブランク・ページ 58 <WebSphere MQ V7 Update Workshop> Pub/Sub関連機能の管理 Pub/Subブローカー パブリッシャーとサブスクライバーの間を仲介 パブリッシャーからパブリケーションを受け取り、サブスクライバーに配信 サブスクライバーからのサブスクリプションを登録 Pub/Subブローカーの起動の制御 キュー・マネージャー属性:PSMODEで制御 コマンド:ALTER QMGR PSMODE(設定) ENABLED(デフォルト値):Pub/Subブローカー稼働 DISABLED:Pub/Subブローカー非稼働 COMPAT:WMB, WMQv6.0以前との互換用設定 キュー・マネージャーの再起動は不要 例)分散系MQのブローカープロセス –amqfcxba –amqfqpub 例)DISABLEDからENABLEDに変更時のAMQERRログ 2008/05/19 20:03:30 - Process(2688.1) User(MUSR_MQADMIN) Program(amqfqpub.exe) AMQ5806: WebSphere MQ Publish/Subscribe ブローカーがキュー・マネージャー SNOOPY に対して始動されました。 説明: WebSphere MQ Publish/Subscribe ブローカーがキュー・マネージャー SNOOPY に対して 始動されました。 処置: ありません。 59 <WebSphere MQ V7 Update Workshop> Pub/Subブローカーの稼働状況 Pub/Subブローカーの稼働状況確認 DISPLAY PUBSUB ALLコマンドでPub/Subブローカーの稼働状況を確認可能 ACTIVE:稼働中 :互換モードで稼働中 :エラー INACTIVE :非稼働(PSMODE(DISABLED)) COMPAT ERROR 照会結果 1 : dis pubsub all AMQ8723: パブリッシュ/サブスクライブ状況の詳細を表示します。 QMNAME(SNOOPY) TYPE(LOCAL) STATUS(ACTIVE) CSQM293I M7BB CSQMDRTC 1 PUBSUB FOUND MATCHING REQUEST CRITERIA CSQM201I M7BB CSQMDRTC DIS PUBSUB DETAILS 833 TYPE(LOCAL) QMNAME(M7BB) STATUS(ACTIVE) END PUBSUB DETAILS MQ/Windows版 MQ/zOS版 Pub/Subブローカー非稼働時には、パブリッシュ/サブスクライブができない アプリケーションにはMQRC 2531 PUBSUB_INHIBITEDが返される SUBオブジェクトの定義不可(AMQ8101) プロセスが異常終了した場合には、自動で再起動 –AMQERR0x.LOG、SYSLOGには異常終了が記録される –Pub/Subアプリケーションが稼働している環境では監視項目とすることも可能 60 <WebSphere MQ V7 Update Workshop> Pub/Sub関連新規オブジェクト 新規オブジェクトの追加 Pub/Sub機能の拡張に伴い、以下のMQオブジェクトが追加 TOPIC(トピック・オブジェクト) SUB(サブ・オブジェクト) 関連するMQSCコマンド(DEFINE/DELETE/ALTER/DISPLAY)も追加 トピック・ストリング、サブスクライバーのステータス照会コマンドが追加 DISPLAY TPSTATUS DISPLAY SBSTATUS トピック・オブジェクト トピック・ツリー内の管理ノードとなり、以下の管理機能を提供 属性の設定 トピックに対するパブリッシュ/サブスクライブの可否など、各種属性を設定可能 セキュリティの設定 トピック・オブジェクトに対してセキュリティ権限を設定可能 –トピック・ストリングに対するアクセス権をプリンシパル(グループ、ユーザー)に対して設定可能 61 <WebSphere MQ V7 Update Workshop> トピック・ツリー内の属性 トピック・オブジェクトの属性 一部の属性は、 ASPARENT 指定可能 上位の管理ノードの属性を引き継ぐ設定 最上位の管理ノードとしてSYSTEM.BASE.TOPICが存在 SYSTEM.BASE.TOPIC デフォルトで提供されるトピック・オブジェクト トピック・ツリー内にトピック・オブジェクトが定義されていない場合、ASPARENT指定の属性は当オブ ジェクトの設定から引き継ぐ 凡例 トピック・ オブジェクト SYSTEM. BASE.TOPIC 管理ノード 非管理ノード x トピック・ツリー内にトピック TORINO”を定義 x 自動生成されるノード”/olympic”は、 SYSTEM.BASE.TOPIC(以下SBT)の設定を引き 継ぐ x トピック“TORINO”はDURSUB(ASPARENT)なので、 SBTの指定YESを継承 x ”TORINO”より下位のノードは TORINO” の指定を引 き継ぐ x トピック”BEIJING”は、DURSUBをNOと指定 /judo x トピック・ツリー内のBEIJING以下のノードは、 DURSUBは許可されない サブスクライバー /olympic/beijing/judo x DURSUB (YES) ‘’ DURSUB (ASPARENT) DURSUB (NO) /olympic TORINO /torino /skate サブスクライバー /olympic/torino/skate BEIJING /beijing 62 と でDURSUBの指定が異なる <WebSphere MQ V7 Update Workshop> TOPICオブジェクトに対するMQSCコマンド DEFINE/ALTER/DELETE/DISPLAYが可能 TOPICSTRの変更は不可(DELETE => DEFINEで対応) TOPCSTRの最大長は10KB(10240文字) DISPLAY TOPICコマンドの注意点 ASPARENTと設定した属性はそのまま“ASPARENT”と表示 解決された値を知るためにはDISPLAY TPSTATUSコマンドで確認 63 <WebSphere MQ V7 Update Workshop> 参考:TOPICの属性 DEFINE TOPICコマンド BASE.TOPICカラム:SYSTEM.BASE.TOPICの設定値(ASPARENTの解決に使用) ※カラム:P(パブリッシュ関連)、S(サブスクライバー関連) 属性名 (topic_name) TOPICSTR CMDSCOPE QSGDISP LIKE ※ 説明 このトピックの名前 このトピックオブジェクトによって表される トピック・ストリング。このパラメータは必須 (z/OSのみで有効)キュー共用環境のコマ ンドスコープ (z/OSのみで有効)キュー共用環境にお けるオブジェクトの性質 このトピックを定義する際にモデルとして 使用するオブジェクト名 REPLACE/ NOREPLACE トピック属性 CLUSTER 既存の定義と置き換えるかどうか DEFPRTY P DEFPSIST P DEFPRESP P DESCR DURSUB S 公開するクラスターの名前 パブリケーション・メッセージの、省略時の 優先順位 パブリケーション・メッセージの、省略時の 持続性 パブリケーション・メッセージをキューに書 き込む際の、省略時の書き込みモード このオブジェクトに関するコメント記述 アプリケーションが、このトピックについて 継続サブスクリプションを許可するかどう 64 デフォルト値 (必須) BASE.TOPIC 設定可能値 最大48文字 (必須) 最大1024文字 ‘ ’ (ブランク) キュー・マネージャー名/*(アスタリスク) QMGR COPY/GROUP/PRIVATE NOREPLACE REPLACE ‘ ’ (ブランク) string ASPARENT 0 ASPARENT NO ASPARENT SYNC SYNC/ASYNC YES YES/NO ブランク ASPARENT 0~9 (string) <WebSphere MQ V7 Update Workshop> 参考:TOPICの属性(続き) 属性名 トピック属性 ※ 説明 MDURMDL MNDURMDL NPMSGDLV P PMSGDLV P PROXYSUB S PUB P PUBSCOPE P SUB S SUBSCOPE S TYPE WILDCARD デフォルト値 キュー・マネージャー管理のサブスクライ バーキューのモデル・キュー名(継続サブ 用) キュー・マネージャー管理のサブスクライ バーキューのモデル・キュー名(非継続サ ブ用) このトピックに対して発信されたノン・パー システント・メッセージの配信オプション このトピックに対して発信されたノン・パー システント・メッセージの配信オプション このトピックに対するプロキシー・サブスク リプションを、接続しているキュー・マネー ジャーに送信するタイミング このトピックに対するパブリッシュを許可 するかどうか このブローカーが階層型またはクラスター Pub/Sub内のブローカーにパブリケーショ ンを伝播するかどうか このトピックに対するサブスクライブをを許 可するかどうか このブローカーがローカルのパブリケー ションのみ受け取るか、接続されたブロー カーのパブリケーションも受け取るか このトピックのタイプ このトピックに関するワイルド・カードの振 る舞い ‘ ’ (ブランク) ‘ ’ (ブランク) BASE.TOPIC SYSTEM. DURABLE. MODEL.QUEUE SYSTEM. NDURABLE. MODEL.QUEUE 設定可能値 (string) ブランクの場合はASPARENTと同等 (string) ブランクの場合はASPARENTと同等 ASPARENT ALLAVAIL ALL/ALLAVAIL/ALLDUR ASPARENT ALLDUR ALL/ALLAVAIL/ALLDUR FIRSTUSE FORCE ASPARENT ENABLED ENABLED/DISABLED ASPARENT ALL QMGR/ALL/QSGDISP ASPARENT ENABLED ENABLED/DISABLED ASPARENT ALL QMGR/ALL LOCAL BLOCK PASSTHRU 65 <WebSphere MQ V7 Update Workshop> SUBオブジェクト MQオブジェクトとしてサブスクリプション登録を実施 アプリ内からMQSUBを実行してサブスクリプション登録する代わりに使用 DEFINE/ ALTER/ DELETE/ DISPLAYが可能 DELETE SUBコマンド 継続サブスクリプションの削除に使用可能 DISPLAY SUBコマンド TYPEでサブスクリプション登録がアプリ(MQSUBコール)で行われたか、コマンドで行われたか識別 –TYPE(ADMIN) コマンドによるサブスクリプション登録 –TYPE(API) MQSUBコールによるサブスクリプション登録 66 <WebSphere MQ V7 Update Workshop> 参考:SUBの属性 DEFINE SUBコマンド 属性名 (subscription_name) 説明 サブスクリプション名 デフォルト値 設定可能値 CMDSCOPE (z/OSのみで有効)キュー共用環境のコマンドスコープ ‘ ’ (ブランク) キュー・マネージャー名/ *(アスタリスク) LIKE このトピックを定義する際にモデルとして使用するオブジェクト名 既存の定義と置き換えるかどうか NOREPLACE REPLACE サブスクライバーキュー サブスクライバーキューのタイプ サブスクライバーに配信されたメッセージの相関ID サブスクライバー・キューマネージャー 継続サブスクリプションを許可するかどうか サブスクリプション存続時間 Pub/Sub関連のメッセージ・プロパティをサブスクライバーに送付 するかどうか サブスクライバーから渡すMQMD:AccountingToken サブスクライバーから渡すMQMD中のApplIdentity Data パブリケーションメッセージの優先順位 サブスクライバーがリクエストしてパブリケーションを受け取るか どうか パブリケーションにアプライするセレクター サブスクリプションのレベル サブスクリプションを他のブローカーに伝播するかどうか サブスクライブするトピック・ストリング このサブスクリプションが使用するトピックオブジェクト名 サブスクリプションに関連するユーザーデータ。メッセージ・プロ パティとしてサブスクリプションに渡される サブスクリプション作成者以外のユーザーが該当サブスクリプ ションを使用できるかどうか ワイルドカードの解釈に使用されるスキーマ (必須) PROVIDED MANAGED (ブランク) YES UNLIMITED NO (integer) (1/10秒単位) REPLACE/ NOREPLACE SUB属性 DEST DESTCLAS DESTCORL DESTQMGR DURABLE EXPIRY PSPROP PUBACCT PUBAPPID PUBPRTY REQONLY SELECTOR SUBLEVEL SUBSCOPE TOPICSTR TOPICOBJ USERDATA VARUSER WSCHEMA NONE MSGPROP/COMPAT/RFH2 (ブランク) (ブランク) ASPUB ASQDEF /(integer) NO YES ブランク 1 ALL いずれか必須 0~9 QMGR (string) (string) ブランク ANY FIXED TOPIC CHAR 67 <WebSphere MQ V7 Update Workshop> トピック・ストリング/サブスクライバーのステータス照会 DISPLAY TPSTATUS トピック・オブジェクトだけでなく、自動生成のトピック・ストリングの状況、アプリケーションの稼働 状況を確認可能 トピックに関する実行時属性の確認 : TYPE(TOPIC) : TYPE(PUB) : TYPE(SUB) 稼働中のパブリッシャーの詳細を照会 稼働中のサブスクライバーの詳細照会 DISPLAY TPSTATUS( generic_topic_string )TYPE( TOPIC | PUB | SUB ) [ WHERE( filter_keyword operator filter_value ) ] DISPLAY SBSTATUS 稼働中のサブスクライバーの詳細照会 DISPLAY SBSTATUS( subscription_name ) | SUBID(subscription_id) [ WHERE( filter_keyword operator filter_value ) ] [ SUBTYPE( ALL | ADMIN | API | PROXY | USER ) ] 68 <WebSphere MQ V7 Update Workshop> 参考:DISPLAY TPSTATUSコマンド 属性 説明 Topic status parameters ADMIN 管理ノードの場合、関連するトピックオブジェクト。非管理ノードの場合はブランク DEFPRESP 書き込み時のレスポンスモード DEFPRTY メッセージの優先順位 DEFPSIST メッセージの持続性 DURSUB アプリケーションが継続サブスクリプションを許可しているかどうか MDURMDL 継続サブスクリプションがパブリケーションを受け取る際のモデルキュー MNDURMDL 非継続サブスクリプションがパブリケーションを受け取る際のモデルキュー NPMSGDLV このトピックに対して発信されたノン・パーシステント・メッセージの配信オプション PMSGDLV このトピックに対して発信されたパーシステント・メッセージの配信オプション PUB パブリッシュが許可されているかどうか PUBCOUNT このトピック・ストリングをオープンしているハンドル数 このブローカーが階層型またはクラスターPub/Subで接続しているブローカーにパブリケーションを伝播 PUBSCOPE するかどうか RETAINED このトピックに関連するリテイン・パブリケーションがあるかどうか SUB サブスクライブが許可されているかどうか SUBCOUNT このトピック・ストリングに対するサブスクライバーの数(継続サブスクリプション含む) このブローカーが階層型またはクラスターPub/Subで接続しているブローカーにサブスクリプションを伝 SUBSCOPE 播するかどうか Sub status parameters ACTCONN このトピックをオープンしているサブスクライバーのConnectionID DURABLE 継続サブスクリプションの永続性 LMSGDATE このサブスクリプションに対して最新のメッセージが書き込まれた日付 LMSGTIME このサブスクリプションに対して最新のメッセージが書き込まれた時刻 NUMMSGS サブスクリプションの宛先に届いたメッセージの数。SUBRQコールによってもこの数がUPDATEされる RESMDATE このサブスクリプションに対して最新のMQSUBコールが出された日付 RESMTIME このサブスクリプションに対して最新のMQSUBコールが出された日付 SUBID サブスクリプションID SUBTYPE サブスクリプションが作成された方法 SUBUSER サブスクリプション・オーナーユーザー Pub status parameters ACTCONN このトピックをオープンしているパブリッシャーのConnectionID LPUBDATE パブリッシャーが送信した最新のメッセージ日付 LPUBTIME パブリッシャーが送信した最新のメッセージ時刻 NUMPUBS パブリッシャーからのパブリケーションの数(サブスクライバーに送付されたメッセージ数ではない) 69 <WebSphere MQ V7 Update Workshop> 参考:DISPLAY SBSTATUSコマンド 属性 ACTCONN DURABLE LMSGDATE LMSGTIME NUMMSGS RESMDATE RESMTIME SUBID SUBTYPE 説明 サブスクライバーのConnectionID 継続サブスクリプションの永続性 サブスクライバーに送信された最新メッセージの日付 サブスクライバーに送信された最新メッセージの時刻 サブスクライバーに送信されたメッセージ数 このサブスクリプションに対して最新のMQSUBコールが出された日付 このサブスクリプションに対して最新のMQSUBコールが出された時刻 サブスクリプションID(ユニーク) サブスクリプションが作成された方法 70 <WebSphere MQ V7 Update Workshop> 参考:トピックに関する照会コマンドの出力結果 トピック・オブジェクト、トピック・ストリングに関する照会コマンド 2. DISPLAY TPSTATUS TOPICSTR(/olympic) ADMIN( ) MDURMDL(SYSTEM.DURABLE.MODEL.QUEUE) MNDURMDL(SYSTEM.NDURABLE.MODEL.QUEUE) DEFPSIST(NO) DEFPRTY(0) DEFPRESP(SYNC) DURSUB(YES) PUB(ENABLED) SUB(ENABLED) PMSGDLV(ALLDUR) NPMSGDLV(ALLAVAIL) RETAINED(NO) PUBCOUNT(0) SUBCOUNT(0) PUBSCOPE(ALL) SUBSCOPE(ALL) 1. DISPLAY TOPIC DURSUB (YES) 1 : DIS TOPIC(BEIJING) ALL AMQ8633: トピックの詳細を表示します。 TOPIC(BEIJING) TOPICSTR(/olympic/beijing) CLUSTER( ) PUB(ASPARENT) DEFPSIST(ASPARENT) DEFPRESP(ASPARENT) ALTTIME(17.31.27) NPMSGDLV(ASPARENT) SUBSCOPE(ASPARENT) WILDCARD(PASSTHRU) MNDURMDL( ) SYSTEM. BASE.TOPIC ‘’ 3. DISPLAY TPSTATUS AMQ8754: トピック状況の詳細を表示します。 TOPICSTR(/olympic/beijing) MDURMDL(SYSTEM.DURABLE.MODEL.QUEUE) MNDURMDL(SYSTEM.NDURABLE.MODEL.QUEUE) DEFPSIST(NO) DEFPRESP(SYNC) PUB(ENABLED) PMSGDLV(ALLDUR) RETAINED(NO) SUBCOUNT(0) SUBSCOPE(ALL) /olympic TYPE(LOCAL) DESCR( ) DURSUB(NO) SUB(ASPARENT) DEFPRTY(ASPARENT) ALTDATE(2008-06-16) PMSGDLV(ASPARENT) PUBSCOPE(ASPARENT) PROXYSUB(FIRSTUSE) MDURMDL( ) ADMIN(BEIJING) BEIJING DEFPRTY(0) DURSUB(NO) SUB(ENABLED) NPMSGDLV(ALLAVAIL) PUBCOUNT(0) PUBSCOPE(ALL) DEFINE TOPIC(BEIJING) TOPICSTR(‘/olympic/beijing’) DURSUB(NO) /beijing /judo パブリッシャー /olympic/beijing/judo 71 サブスクライバー /olympic/beijing/judo 4. DISPLAY TPSTATUS AMQ8754: トピック状況の詳細を表示します。 TOPICSTR(/olympic/beijing/judo) MDURMDL(SYSTEM.DURABLE.MODEL.QUEUE) MNDURMDL(SYSTEM.NDURABLE.MODEL.QUEUE) DEFPSIST(NO) DEFPRESP(SYNC) PUB(ENABLED) PMSGDLV(ALLDUR) RETAINED(YES) SUBCOUNT(1) SUBSCOPE(ALL) ADMIN( ) DEFPRTY(0) DURSUB(NO) SUB(ENABLED) NPMSGDLV(ALLAVAIL) PUBCOUNT(1) PUBSCOPE(ALL) <WebSphere MQ V7 Update Workshop> 参考:トピックに関する照会コマンドの出力結果 ノート 1. DISPLAY TOPIC(BEIJING) 定義したトピックの照会 ASPARENT設定の属性はそのまま”ASPARENT”と表示される(上位のトピック・オブジェクトの設定内 容は表示されない) 2. DISPLAY TPSTATUS(‘/olympic/’) ADMINがブランク( )表示なので、自動生成されたトピック・ストリングと識別可能 ASPARENT設定は上位のSYSTEM.BASE.TOPICの設定を引き継ぐ 例)SUB(ENABLED) DURSUB(YES) 3. DISPLAY TPSTATUS(‘/olympic/beijing’) 1.で定義したトピックに関連するトピックストリングのステータス照会 ADMINが(BEIJING)と指定されているので管理ノードと識別可能 トピック・オブジェクト定義でASPARENT指定のものの実行値を確認可能 例)SUB(ENABLED) 4. DISPLAY TPSTATUS(‘/olympic/beijing/judo’) サブスクライバにより自動生成されたトピック・ストリングのステータス照会 上位のトピック・オブジェクトのDURSUB指定を引き継ぎ、DURSUB(NO) その他の、上位トピック・オブジェクト定義でASPARENT指定のものの実行値を確認可能 例)SUB(ENABLED) 72 <WebSphere MQ V7 Update Workshop> 参考:アプリケーションに関する照会コマンド出力結果 稼働中のPub/Subアプリケーションに関する照会 SYSTEM. BASE.TOPIC 2. DISPLAY TPSTATUS TYPE(SUB) ‘’ 6 : DIS TPSTATUS('/olympic/beijing/judo') TYPE(SUB) AMQ8754: トピック状況の詳細を表示します。 TOPICSTR(/olympic/beijing/judo) SUBID(414D5120534E4F4F5059202020202020C0A85B4820007304) SUBUSER(naoko) RESMDATE(2008-06-23) RESMTIME(20:04:35) LMSGDATE(2008-06-23) LMSGTIME(20:04:42) ACTCONN(414D5143534E4F4F5059202020202020C0A85B4820007301) DURABLE(NO) SUBTYPE(API) NUMMSGS(4) /olympic BEIJING /beijing /judo パブリッシャー /olympic/beijing/judo サブスクライバー /olympic/beijing/judo 1. DISPLAY TPSTATUS TYPE(PUB) 4 : DIS TPSTATUS('/olympic/beijing/judo') TYPE(PUB) AMQ8754: トピック状況の詳細を表示します。 TOPICSTR(/olympic/beijing/judo) LPUBDATE(2008-06-23) LPUBTIME(20:04:42) ACTCONN(414D5143534E4F4F5059202020202020C0A85B4820007401) NUMPUBS(3) 4. DISPLAY CONN 3. DISPLAY SBSTATUS 5 : DIS SBSTATUS(*) ALL AMQ8099: WebSphere MQ サブスクリプション状況の照会がありました。 SUB( ) SUBID(414D5120534E4F4F5059202020202020C0A85B4820007304) SUBUSER(naoko) RESMDATE(2008-06-23) RESMTIME(20:04:35) LMSGDATE(2008-06-23) LMSGTIME(20:04:42) ACTCONN(414D5143534E4F4F5059202020202020C0A85B4820007301) DURABLE(NO) NUMMSGS(4) SUBTYPE(API) 4. DISPLAY CONN AMQ8276: 接続の詳細を表示します。 CONN(C0A85B4820007401) EXTCONN(414D5143534E4F4F5059202020202020) TYPE(CONN) PID(4564) TID(1) APPLTAG(ls¥c¥samples¥bin¥amqspub.exe) APPLTYPE(USER) ASTATE(NONE) CHANNEL( ) CONNAME( ) CONNOPTS(MQCNO_SHARED_BINDING) USERID(naoko) UOWLOG( ) UOWSTDA( ) UOWSTTI( ) UOWLOGDA( ) UOWLOGTI( ) URTYPE(QMGR) EXTURID(XA_FORMATID[00000000] XA_GTRID[] XA_BQUAL[]) QMURID(0.0) UOWSTATE(NONE) AMQ8276: 接続の詳細を表示します。 CONN(C0A85B4820007301) EXTCONN(414D5143534E4F4F5059202020202020) TYPE(CONN) PID(536) TID(1) APPLTAG(ls¥c¥samples¥bin¥amqssub.exe) APPLTYPE(USER) ASTATE(NONE) CHANNEL( ) CONNAME( ) CONNOPTS(MQCNO_SHARED_BINDING) USERID(naoko) UOWLOG( ) UOWSTDA( ) UOWSTTI( ) UOWLOGDA( ) UOWLOGTI( ) URTYPE(QMGR) EXTURID(XA_FORMATID[00000000] XA_GTRID[] XA_BQUAL[]) QMURID(0.0) UOWSTATE(NONE) 73 <WebSphere MQ V7 Update Workshop> 参考:アプリケーションに関する照会コマンド出力結果 ノート 1. DISPLAY TPSTATUS(‘/olympic/beijing/judo’) TYPE(PUB) トピックストリングに対するパブリッシャーのステータス照会 パブリケーションの数、最新のパブリケーションが送信された日時が表示される ACCTCONNを使用してDISPLAY CONNで表示されるアプリケーションと紐付けが可能 2. DISPLAY TPSTATUS(‘/olympic/beijing/judo’) TYPE(SUB) トピックストリングに対するサブスクライバーのステータス照会 サブスクライバーに送信されたメッセージの数、最新のパブリケーションが送信された日時が表示される ACCTCONNを使用してDISPLAY CONNで表示されるアプリケーションと紐付けが可能 3. DISPLAY SBSTATUS (‘/olympic/beijing/judo’) サブスクライバーのステータス照会がSUBID毎に出力 サブスクライバーに送信されたメッセージの数、最新のパブリケーションが送信された日時が表示される ACCTCONNを使用してDISPLAY CONNで表示されるアプリケーションと紐付けが可能 4. DISPLAY CONN(*) キュー・マネージャーに接続しているアプリケーションの表示 CONNおよびEXTCONNを使用して、Pub/Subアプリケーションとの紐付けが可能 74 <WebSphere MQ V7 Update Workshop> CLEAR TOPICSTR リテイン・パブリケーションを削除する際に使用 リテイン・パブリケーションは、SYSTEM.RETAINED.PUB.QUEUE(パブリッシャー共通の キュー)に保管 CLERA TOPICSTR コマンドを使用してトピック毎に不要なリテイン・パブリケーションを削除できる リテイン・パブリケーションの有無確認とクリア リテイン・パブリケーションがあるトピック・ストリングを特定 コマンド:DISPLAY TPSTATUS(‘#’) WHERE(RETAINED EQ YES) リテイン・パブリケーションの削除 コマンド:CLEAR TOPICSTR(topic_string_name) CLRTYPE(RETAINED) 削除状況を確認 コマンド:DISPLAY TPSTATUS(‘#’) WHERE(RETAINED EQ YES) コマンド構文 CLEAR TOPICSTR( string ) CLRTYPE( RETAINED ) [ SCOPE( LOCAL | GLOBAL ) ] 75 <WebSphere MQ V7 Update Workshop> 参考:MQエクスプローラーによるトピックの照会 MQエクスプローラーを使用したトピックの照会 管理ノードの場合トピック・ オブジェクト名が表示される トピック・ツリー の構造 76 <WebSphere MQ V7 Update Workshop> 分散Pub/Sub 77 <WebSphere MQ V7 Update Workshop> 分散Pub/Sub 分散Pub/Subとは Pub/Subブローカーを複数接続してパブリケーションを送受信すること ブローカー間(キュー・マネージャー間)の接続には、メッセージ・チャネルを使用 ブローカー間でプロキシー・サブスクリプション情報を元にパブリケーション・メッセージを配信 Pub/Subアプリケーションはブローカーの構成を意識しない ブローカーの接続方法は、階層型、クラスター型の2種類 HIBR1 CLBR1 HIBR3 CLBR2 HIBR2 CLBR6 HIBR4 階層型Pub/Sub CLBR3 CLBR5 CLBR4 クラスターPub/Sub プロキシー・サブスクリプション(プロキシー・サブ) Pub/Subネットワーク内でパブリケーションをサブスクライバーに配信するために、ブローカーが 生成・送受信するブローカー間のサブスクリプション情報 78 <WebSphere MQ V7 Update Workshop> 分散Pub/Sub プロキシー・サブとパブリケーションの伝播 プロキシー・サブの集約と伝播 プロキシー・サブは、サブスクリプションを登録したブローカーと直接接続しているブローカーに送信される 受信したプロキシー・サブは、直接接続している別のブローカーに送信される 2回目以降のサブスクリプション登録では、プロキシー・サブは伝播しない サブスクライバーが終了した時点でプロキシー・サブは削除される パブリケーションの伝播と集約 1つのパブリケーションが1ブローカーからの複数のプロキシー・サブにマッチする場合でも、 パブリケーションは1つだけ送信 階層型Pub/Subの例 4) 7) /a BR-1 サブスクライバー 3) 5) 1) BR-2で/aにサブスクリプション登録 2) BR-2のPub/SubブローカーがBR-1にプロキシーサブを送信 3) BR-1はBR-3に、BR-3はBR-4に、送信されてきたプロキシーサブを 送信 4) BR-1で同じ/aにサブスクリプション登録 5) BR-1はBR-2にプロキシーサブを送信。BR-3にはすでにプロキシー サブが存在しているので送信しない 6) BR-4でパブリッシャーが/aに配信 7) プロキシーサブの情報に従って、BR-1、BR2に接続しているサブスク ライバーに送信される 2) BR-3 7) BR-2 1) /a 3) サブスクライバー 6) BR-4 ローカルサブスクリプション /a プロキシーサブスクリプション パブリッシャー 79 <WebSphere MQ V7 Update Workshop> パブリケーション/サブスクリプションの配信範囲の設定 分散 Pub/Sub 環境で、パブリケーションの配信範囲を制御したり、その他のブローカー で配信されるパブリケーションの受信を拒否したりする パブリケーションの配信範囲の制御 パブリッシャーの設定 トピック・オブジェクトのPUBSCOPEで設定 サブスクリプションの伝播範囲の制御 サブスクライバーの設定 サブ・オブジェクトのSUBSCOPEの設定 トピック・オブジェクトのSUBSCOPEで設定 設定箇所 オブジェクト、もしくは アプリケーションで設定 パブリッシャーでの指定 TOPIC オブジェクト定義例 pmo.Options = MQPMO_SCOPE_QMGR DEFINE TOPIC(JUDO.RESULT) + TOPICSTR(‘/olympic/beijing/judo/men/result’) + PUBSCOPE(ALL) SUBSCOPE(ALL) + サブスクライバーでの指定 SUB オブジェクト定義例 so.Options = MQSO_SCOPE_QMGR DEFINE SUB(MY.SUB) + TOPICSTR(‘/olympic/beijing/judo/men/result’) + SUBSCOPE(QMGR) + 80 <WebSphere MQ V7 Update Workshop> パブリケーション/サブスクリプションの配信範囲の設定 オブジェクトの設定値 属性 設定値 動き PUBSCOPE QMGR パブリケーションの配信エリアをローカルブローカーに限定 ALL パブリケーションの配信を分散Pub/Sub環境内の全ブローカーに配信 QMGR ローカルで配信されるパブリケーションのみ受信 (プロキシー・サブの伝播を行わない) ALL 分散Pub/Sub環境内で配信されたパブリケーションを受信 SUBSCOPE (プロキシー・サブの伝播を行う) 注意 配信範囲は、オブジェクト、アプリケーションの双方で指定可能だが、いずれかでQMGRを指定すると 配信範囲はQMGRに限定されることになる 例: TOPICオブジェクトは SUBSCOPE(ALL)で、アプリケーションでMQSO_SCOPE_QMGR を指 定した場合 親 ブローカー –サブスクリプションはリモートへは配信されない 子 ブローカー 子 ブローカー SUBSCOPEの例 MY.SUBの情報はQMGRのため、その 他のブローカーから送信されるパブリ ケーションは受信しない DEF MY.SUB DEFの情報はALLのため、その他のブ ローカーで配信されたパブリケーション も受信可能 サブスクライバー サブスクライバー SUB(MY.SUB) SUBSCOPE(QMGR) の有効範囲 SUB(DEF) SUBSCOPE(ALL) の有効範囲 81 <WebSphere MQ V7 Update Workshop> 階層型Pub/Sub 階層型Pub/Subとは ネットワーク内のブローカー(キュー・マネージャー)に親子関係を設定することで構成 親子間の双方向チャネル定義、伝送キュー定義が必要 キュー・マネージャー属性:PARENTに親キュー・マネージャー名指定することで階層化 –コマンド:ALTER QMGR PARENT(親キュー・マネージャー名) –親を複数指定することは不可 –子の指定は不要 HIBR1 中間のブローカーを経由してパブリケーションを配信 経路上のブローカー/ネットワークダウンの場合、 メッセージが配信されない 配信経路上のブローカー数が多いと クラスターPub/Subよりもパフォーマンスが劣る パブリッ シャー SUBSCRIBER HIBR3 サブスク ライバー HIBR4 HIBR2 ALTER QMGR PARENT(HIBR1) ALTER QMGR PARENT(HIBR3) 関連コマンド DISPLAY PUBSUB ALL/TYPE(PARENT/CHILD)を使用して親子関係を表示 1 : display pubsub all AMQ8723: パブリッシュ/サブスクライブ状況の詳細を表示します。 QMNAME(HI2416) TYPE(LOCAL) STATUS(ACTIVE) AMQ8723: パブリッシュ/サブスクライブ状況の詳細を表示します。 QMNAME(HI2417) TYPE(CHILD) STATUS(ACTIVE) AMQ8723: パブリッシュ/サブスクライブ状況の詳細を表示します。 QMNAME(HI2415) TYPE(PARENT) STATUS(ACTIVE) 82 <WebSphere MQ V7 Update Workshop> クラスターPub/Sub クラスターPub/Subとは ブローカー(キュー・マネージャー)をMQクラスターに参加させ、トピック・オブジェクトを 公開することで構成 トピック・オブジェクトをMQクラスターに公開した時点で、フルリポジトリからすべてのパーシャルリポジトリ に伝播する(MQクラスターの仕組みを使用) –クラスター内の全ブローカーが該当トピックをクラスタートピックとして認識 cf. クラスターキューは初回使用時にフルリポジトリに問いあわせて認識する クラスタートピックを保持するブローカー(キュー・マネージャー)をクラスター・トピックホストと呼ぶ メッセージ送信のタイミングで動的クラスターチャネルが開始される –プロキシーサブスクリプションの送信 –パブリケーションの送信 クラスター内のブローカーをクラスターチャネルで接続しパブリケーションを配信 パブリケーションが直接配信されるので、階層型Pub/Subよりもパフォーマンスが向上 トポロジー内のあるブローカー/ネットワークダウンの影響を受けにくい MQクラスターによりオブジェクトの管理が容易 チャネルや伝送キューの明示定義が不要でネットワークへのキューマネージャーの追加や削除が容易 83 <WebSphere MQ V7 Update Workshop> クラスターPub/Sub 考慮点 1. 2. 3. 4. 5. クラスターPub/Subでは、メッセージ送信のワークロードバランスはされない – パブリッシャーからサブスクライバーに配信されるクラスターチャネルの自動定義の仕組みを提供する のみ 規模が大きくなるとキュー・マネージャー間のチャネル数も増加 – クラスター機能によりチャネルや伝送キューの定義追加は不要だが、監視に対する考慮は必要 DEFINE TOPIC(TPC.A) TOPICSTR(‘/a/b’) CLUSTER(CLUS_A) CLQM6でトピック・オブジェクトを定義 1) フル・リポジトリに情報が伝播 2) フルリポジトリからパーシャルリポジトリに伝播 →クラスター内のキュー・マネージャーでDISPLAY CLUSQMGR(*)を行うと、全キュー・マネー ジャーが表示される (CLQM1∼CLQM6) CLQM1, CLSMQ5でTOPIC.Aにサブスクライブする プロキシー・サブが全ブローカーに直接伝播 CLQM3で、TOPIC.Aにパブリッシュする パブリケーションがCLQM1, CLQM5に配信される ローカル トピック Full サブスク ライバー TOPIC.A CLQM1 Full クラスター トピック CLQM2 TOPIC.A TOPIC.A CLQM6 サブスク ライバー CLQM3 CLQM5 TOPIC.A 84 TOPIC.A CLQM4 TOPIC.A パブリッ シャー <WebSphere MQ V7 Update Workshop> クラスターPub/Subのオーバーラップ プロキシー・サブが伝播するのは、トピックが定義されているクラスター内に限定 トピックオブジェクトにクラスターネームリストの指定はできない 複数クラスターを構成している場合には、クラスターに公開するトピック名は複数クラスター内 でユニークであること クラスターA TOPIC_C tps:/beijing/judo (前提) CLQM3がクラスターA, クラスターBに参加している • CLQM1にてTOPIC_C(/beijing/judo)を定義してクラス ターAに公開 • クラスターA内にTOPIC_Cのクラスター情報が伝播 (CLQM3にも伝播) • CLQM5にてTOPIC_C(/beijing/judo)を定義してクラス ターBに公開 • CLQM3は入手したTOPIC_Cの情報で既存のCLQM_C 情報を更新。その結果、CLQM3が保持している TOPIC_Cのトピック・ストリングは/beijing/swimmingとな る。 • CLQM3がTOPIC_Cにサブスクライブした場合、配信さ れるトピックは/beijing/swimmingのみとなる クラスターB CLQM1 CLQM4 CLQM3 CLQM2 CLQM5 TOPIC_C tps:/beijing/swimming 85 <WebSphere MQ V7 Update Workshop> クラスターPub/Sub関連コマンド DISPLAY TOPIC(*) TYPE(CLUSTER) クラスタートピック情報の照会 DISPLAY TCLUSTER(*)と同義 出力例 –太字:クラスター関連の属性 1 : display tcluster(*) all AMQ8633: トピックの詳細を表示します。 TOPIC(OLYMPIC) TOPICSTR(Olympic/Beijing) CLUSTER(CLUS_A) QMID(CLQM1418_2008-05-30_15.50.08) PUB(ASPARENT) DEFPSIST(NO) DEFPRESP(ASYNC) CLUSTIME(16.36.46) ALTTIME(16.36.46) NPMSGDLV(ASPARENT) SUBSCOPE(ASPARENT) WILDCARD(0) MNDURMDL( ) TYPE(CLUSTER) DESCR( ) CLUSQMGR(CLQM1418) DURSUB(ASPARENT) SUB(ASPARENT) DEFPRTY(ASPARENT) CLUSDATE(2008-05-30) ALTDATE(2008-05-30) PMSGDLV(ASPARENT) PUBSCOPE(ASPARENT) PROXYSUB(FIRSTUSE) MDURMDL( ) 86 <WebSphere MQ V7 Update Workshop> 階層型とクラスターの組み合わせ クラスターPub/Sub パブリケーションが直接サブスクライバーに送信されるのでパフォーマンスがよい ネットワーク内のブローカー障害の影響を受けにくい 考慮点 チャネル数が多くなるのでリソースへの影響が階層型よりも大きい チャネルの自動定義・開始のため、運用監視での対応が必要 階層型Pub/Sub 拡張性がクラスターより高い ネットワークの把握がより容易 階層型との組み合わせ 双方の利点をとってクラスターと階層型の組み合わせて構築することも可能 例:地域毎のクラスターを構成し、地域間は階層型で接続 関東クラスター B1 B2 関西クラスター B3 東北クラスター A1 C1 C2 C3 A2 A3 87 <WebSphere MQ V7 Update Workshop> ブランク・ページ 88 <WebSphere MQ V7 Update Workshop> Pub/Subセキュリティ 89 <WebSphere MQ V7 Update Workshop> Pub/Subのセキュリティ管理 トピック・オブジェクト(管理ノード)単位にセキュリティを設定 プリンシパル(ユーザー、グループ)に対してpub/sub/resumeの権限を付与 上位の管理ノードの権限を継承 Pub/Sub時には、トピック・ストリングの上位の管理ノードの権限がチェックされる 直近の上位管理ノードに権限がなくても、上位の管理ノードのいずれかに権限がある場合には、 アプリケーションの実行が可能 セキュリティ・チェック実施のタイミング パブリッシュするとき トピックに対するMQOPEN実行時 サブスクライブするとき トピックに対するMQSUB実行時 権限がないと、アプリケーションにエラーが返り、エラーログに記録される 90 <WebSphere MQ V7 Update Workshop> セキュリティの設定方法 トピック・オブジェクトに対してセキュリティを設定 該当トピックおよびそれより下位のトピック・ストリングに対して、パブリッシュやサブスクライブを 許可 自動的に生成されたトピック・ストリングのセキュリティは、上位の管理ノードの設定を継承 明示的に設定することはできない 最上位の管理ノード(SYSTEM.BASE.TOPIC)に権限を付与した場合には、全ての トピックス・トリングに対して許可したことになるので注意 設定方法 setmqautコマンド使用(z/OS以外) MQExplorer使用(z/OS以外) RACFプロファイル使用(zOS) ‘’ SYSTEM. BASE.TOPIC setmqaut –m qmname –n BEIJING –t topic –p user01 +pub +sub /olympic BEIJING setmqautコマンド /beijing 追加オブジェクトタイプ:topic 追加権限:pub, sub, resume /judo setmqaut [-m QMgrName] [-n ObjName] -t ObjType (-p Principal | -g Group) [-s ServiceComponent] Authorizations パブリッシャー /olympic/beijing/judo サブスクライバー /olympic/beijing/judo user01の場合はアプリ ケーションの実行可能 Pub/Subアプリケーションの実行には、キュー・マネージャーへのCONNECT権限、 サブスクライバー・キューがPROVIDEDの場合はキューのGET, BROWSE権限が必要 91 <WebSphere MQ V7 Update Workshop> 権限チェック 権限チェック(z/OS版を除く) OAMがセキュリティチェックを実施 アプリケーションがパブリッシュすると、該当トピックに関する“pub”権限を検査 権限がないとパブリッシュは拒否される アプリケーションがサブスクライブすると該当トピックに対する“sub”権限を検査 権限がないとサブスクライブは拒否される MQSUB時のオプションにresumeが指定されている場合には、トピックに対する”resume” 権限を検査 権限がないとサブスクライブ再開は拒否される 権限が無い場合には、アプリケーション(パブリッシャーまたはサブスクライバー)に権限エラー (MQRC_2035)が返され、エラーログ(Windows版の場合)にも出力される 92 <WebSphere MQ V7 Update Workshop> 参考:アクセス権限エラー <AMQERR0x.LOGより抜粋> 2008/05/26 13:33:41 - Process(2500.39) User(MUSR_MQADMIN) Program(amqzlaa0.exe) AMQ8077: エンティティー 'david' にはオブジェクト 'SPORT' をアクセスするための適 切な権限がありません。 説明: 指定されたエンティティーは、必要なオブジェクトをアクセスする権限がありません。 要求された許可 pub は無許可です。 処置: 必要なオブジェクトに対する権限の正しいレベルが、このエンティティーに設定されて いることを確認するか、あるいはエンティティーが特権グループのメンバーであること を確認してください。 ----- amqzfubn.c : 415 -------------------------------------------------------2008/05/26 13:33:41 - Process(2500.39) User(MUSR_MQADMIN) Program(amqzlaa0.exe) AMQ8077: エンティティー 'david' にはオブジェクト 'SYSTEM.BASE.TOPIC' をアクセス するための適切な権限がありません。 説明: 指定されたエンティティーは、必要なオブジェクトをアクセスする権限がありません。 要求された許可 pub は無許可です。 処置: 必要なオブジェクトに対する権限の正しいレベルが、このエンティティーに設定されて いることを確認するか、あるいはエンティティーが特権グループのメンバーであること を確認してください。 <サンプルアプリのエラー> C:¥>amqssub /olympic/beijing/judo WMQ7 Sample AMQSSUBA start MQCONN ended with reason code 2035 C:¥>amqspub /olympic/beijing/judo WMQ7 Sample AMQSPUBA start MQCONN ended with reason code 2035 93 <WebSphere MQ V7 Update Workshop> 権限の設定例 SYSTEM. BASE.TOPIC [要件]社内の人事情報へのアクセスを制限し たい ‘’ Pub/Subアプリケーションのアクセス権限 COMPANY /company • マネージャー(manager)はトピック:COMPANYに権限を付与 しているので、/company以下のトピック・ストリングに対して Pub/Sub可能 INFORMATION /infomation /product UID: employee Pub/Sub /personnel • 社員(employee)はトピック:INFORMATIONに権限を付与し ているので、/information以下のトピック・ストリングに対して Pub/Sub可能。一方、COMPANYには権限を付与していない ので/company/personnelについてはPub/Sub不可 /sales UID: manager Pub/Sub トピックストリング トピックオブジェクト ユーザーID(グルー プID) 権限 /company COMPANY manager +sub, +pub /company/information INFORMATION employee +sub, +pub 94 <WebSphere MQ V7 Update Workshop> 参考:MQエクスプローラー画面からのセキュリティ設定 • WMQ エクスプローラー画面で、権 限を設定するトピック選択し右ク リック • オブジェクト権限→権限レコードの 管理を選択 • [トピック名]権限レコード管理画面 から右下の新規を選択 • 右の画面がでるので、必要な権限 を設定する 95