...

2章 Pub/Sub 目次

by user

on
Category: Documents
150

views

Report

Comments

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
Fly UP