...

IBM MessageSightを 利用したシステム設計のポイント IBM MessageSight テクニカル・セミナー

by user

on
Category: Documents
35

views

Report

Comments

Transcript

IBM MessageSightを 利用したシステム設計のポイント IBM MessageSight テクニカル・セミナー
IBM MessageSight
テクニカル・セミナー
IBM MessageSightを
利用したシステム設計のポイント
日本アイ・ビー・エム株式会社
© 2014 IBM Corporation
Disclaimer

当資料は、資料内で説明されている製品の仕様を保証するものではありません。

資料の内容には正確を期するよう注意しておりますが、製品の新しいリリース、修正などによっ
て動作/仕様が変わる可能性があるのでご注意下さい。
2
© 2014 IBM Corporation
目次
 MQTT、IBM

MessageSight概要
MQTTおよびMessageSightの概要をご紹介
 MessageSight利用シナリオ

適用できる業界やビジネスエリア、ビジネスにおけるPub/Subの活用などをご紹介
 MessageSightを利用したシステム設計のポイント



システム・パターンとトポロジー
トピック設計、パブリッシャー/サブスクライバー
MessageSightのオブジェクト、セキュリティ
 システム設計例

3
ユースケースに沿った設計の例をご紹介
© 2014 IBM Corporation
Part3「MessageSightを有効利用したシステム設計」の構成
システムグランドデザイン
要件整理
設計パターンの整理
トポロジー設計
論理設計
トピック/ペイロード設計
パブリッシャー設計
サブスクライバー設計
外部連携設計
物理設計
MessageSightオブジェクト定義設計
ユーザ/グループ定義設計
クライアント設計
外部連携設計
4
© 2014 IBM Corporation
システムグランドデザイン
ここでは、Pub/Subシステムの全体構想をまとめる
5
© 2014 IBM Corporation
システムグランドデザインの流れ
システムグランドデザイン
要件整理
設計パターンの整理
トポロジー設計
論理設計
トピック/ペイロード設計
パブリッシャー設計
サブスクライバー設計
1. 要件整理(確認)
外部連携設計
物理設計
MessageSightオブジェクト定義設計
ユーザ/グループ定義設計
クライアント設計
外部連携設計
機能要件についてヒアリング
 論理設計、物理設計時の判断材料としても利用
•
2. 設計パターンの整理
業務アプリケーションの視点でパターン化
 複数パターンの組み合わせもある
• データの視点でパターン化
• Pub/Subモデルへの適用
•
3. トポロジー設計
Pub/Sub コンポーネントの整理とプロトコル選択
• 外部システム連携方式の決定
•
6
© 2014 IBM Corporation
要件整理
システムグランドデザイン
要件確認(整理)
設計パターンの整理
トポロジー設計
論理設計
トピック/ペイロード設計
パブリッシャー設計
サブスクライバー設計
外部連携設計

ヒアリング項目にしたがって、要件を整理
物理設計
MessageSightオブジェクト定義設計
ユーザ/グループ定義設計
クライアント設計
外部連携設計
分類
ヒアリング内容
ヒアリング・ポイント
パターン
業務パターン
Fan-out / Fan-in / Any-to-Any / Point-to-Point
データパターン
1 : N / 1 :1 (特定配信宛先の数)
要求/応答型の有無
接続
データ
セキュリ
ティ
7
同時接続数
最大で同時にMQTTクライアントが何台接続するか
外部連携の有無
APサーバー / ESB / DB / MQ など
接続状況の把握
接続の切断をすばやく検知したいか
データ量
時間当たりのメッセージ数
データ長
Pub/Subの場合はペイロード(データ) + トピック長 を考慮
受信データの鮮度
受信側が接続後のデータのみ受信 / 切断中のデータもすべて
受信 / 切断中の最新データのみ受信
送達保障
データのロストを許容 / 必ず送信(重複許容) /必ず1回送信
接続状況の把握
接続の切断をすばやく検知したいか
ユーザー認証
ユーザーID(パスワード認証) / SSL証明書の利用
認可
データの認可設定が必要か
通信の暗号化
SSL
© 2014 IBM Corporation
要件整理
システムグランドデザイン
業務アプリケーション視点でパターン化
設計パターンの整理
トポロジー設計
論理設計
トピック/ペイロード設計
パブリッシャー設計
サブスクライバー設計

外部連携設計
業務の視点から情報の送信/受信を4パターンに分類する
物理設計
MessageSightオブジェクト定義設計
ユーザ/グループ定義設計
クライアント設計

①
業務によっては複数パターンの組み合わせになるケースもある
多数への情報配信



②
送信者
送信者は、多数の受信者に一括して情報を送りたい
受信者の数は変動する(会員、社員など)
例) 株価配信、スポーツ結果の配信、イベント情報配信、渋滞情報の配信
Fan-in(N :1)

受信者
N:1
多数からの情報集信



8
1:N
Fan-out (1 : N)

外部連携設計
受信者は、多数の送信者から情報を受け取りたい
送信者はある程度決まっている
例) メーターやセンサーからのデータ収集、アンケートの収集
送信者
受信者
© 2014 IBM Corporation
業務アプリケーション視点でパターン化
③

不特定多数への集配信



④
送信者は、一定数の受信者に情報を送りたい
情報の送信者と受信者が不特定多数で変動する
例) グループチャット、フォーラム
送信者
Point-to-Point (1 : 1)


送信者は受信者を特定して情報を送りたい
例) 通知、メーターの制御メッセージの送信
その他の分類
一方向型
 要求/応答型
受信者
1:1
特定配信


N:N
Any-to-Any (N :N)
送信者
受信者
一方向型


9
要求/応答型
一方向型の組み合わせ
© 2014 IBM Corporation
データの視点でパターン化

データの送受信の観点から、4つの業務パターンは2つに集約できる

【Fan-out】
マルチキャスト型(1 :N)

複数宛先に同じデータを送信する
【Any-to Any】
Fan-out が
複数ある業務
データ
[1 : N ]
D
データ
D
D
D
送信者
受信者
D

ユニキャスト型(1 :1 )

D
10
【Point-to-Point】
特定宛先に1つのデータを送信する
データ
送信者
データ
受信者
【Fan-in】
Point-to-Pointが
複数ある業務
[1 : 1]
D
送信者
受信者
送信者
受信者
© 2014 IBM Corporation
Pub/Subモデルへの適用

業務パターンをPub/Subモデルへ適用する
パブリッシャー(送信者)、サブスクライバー(受信者)、Pub/Subブローカー(仲
介)、トピックを整理
 トポロジー設計、トピック設計、セキュリティ設計につなげる


Pub/Subモデル① --- 1 : N (Fan-out / Any-to-Any)



パブリッシャーは1つのトピックに対してペイロード(データ)を送るだけ
ブローカーが複数のサブスクライバーへの配信を行う
サブスクライバーは、トピックをサブスクライブするだけ
【Any-to-Any】
【Fan-out】
トピック
S
S
P
BRK
S
S
パブリッシャー
ブローカー
サブスクライバー
P
P
P
S
S
BRK
S
S
P
パブリッシャー
11
トピック
ブローカー
サブスクライバー
© 2014 IBM Corporation
Pub/Subモデルへの適用

Pub/Subモデル② --- 1 : 1 (Point-to-Point / Fan-in)
パブリッシャーは宛先毎に異なるトピックで配信
 サブスクライバーは、自分専用のトピックをサブスクライブする
 他人のトピックにサブスクライブ/パブリッシュできないようなセキュリティ設定が必要

【Point-to-Point】
【Fan-in】
トピック
P
S
P
S
P
BRK
S
S
パブリッシャー
12
ブローカー
サブスクライバー
P
トピック
BRK
S
P
パブリッシャー
ブローカー
サブスクライバー
© 2014 IBM Corporation
トポロジー決定のための検討項目
要件整理
システムグランドデザイン
設計パターンの整理
トポロジー設計
論理設計
トピック/ペイロード設計
パブリッシャー設計
サブスクライバー設計

Pub/Sub コンポーネントの整理


外部連携設計
測定デバイス、スマートフォン(iOS,Android)、ブラウザー、アプリケーション ・・・
IBM MessageSight :新規でMQTT環境を構築する場合(大規模接続が可能)
WebSphere MQ
:MQ導入済環境で接続台数が少ない場合
バックエンドシステムとの連携方法を決める




APサーバー連携 :JMS / MQTTで新規アプリケーションを作成する
MQ連携 :MessageSightでMQTT⇔MQ変換を実施する
MQTTクライアントが
提供されている言語
ESB連携 :ESB経由で既存アプリケーション変更なしに連携する
DB連携 :リアルタイムのデータ分析、蓄積したデータを後で分析する
プロトコルの選択

• C言語、Java、JavaScript
• .NET、Perl、PHP、Python
(IBMサポート外)
MQTT、JMS(Pub/Sub)、MQ


13
クライアント設計
外部システム連携方式の決定


ユーザ/グループ定義設計
ブローカー


MessageSightオブジェクト定義設計
サブスクライバー / パブリッシャー


外部連携設計
物理設計
アプリケーション開発言語が決まるため、開発要員のスキルも考慮が必要
通信ヘッダのオーバーヘッドが、NWを流れるデータ量に影響
© 2014 IBM Corporation
トポロジーパターン

MessageSight をブローカーに採用する場合の構成パターン

MQTTアプリケーション同士の連携

クライアント ⇔ MessageSight ⇔ バックエンドシステム
クライアント
アプリ

サーバー
アプリ
MQTT
MQTT
クライアント
アプリ
パブリッシャー / サブスクライバーのプロトコルはMQTT



14
MQTT
クライアント ⇔ MessageSight ⇔クライアント
クライアント
アプリ

MQTT
新規にMQTTアプリケーションを作成する
MessageSight との接続情報はアプリケーション内で指定
MessageSight 上に接続設定が必要
© 2014 IBM Corporation
トポロジーパターン

APサーバーとの連携

クライアント ⇔ MessageSight ⇔ バックエンドシステム(APサーバー)
JMS
クライアント
アプリ
MQTT
MQTT
WAS
サーバー
アプリ
DB

アプリケーション視点: プロトコルはMQTT, JMS


Webアプリケーションの場合、MQTTで作成すればクライアント側と開発言語が統一できる
JMSでは、MessageSight がJMSプロバイダーになる


インフラ視点(JMS)


15
Fan-in(データ収集)の場合は、MDBにてサブスクライブして待ち受けることが容易にできる
APサーバー側でMessageSight をJMSプロバイダーとして設定
MessageSight 上にJMSプロトコル利用を設定(MessageHub)
© 2014 IBM Corporation
トポロジーパターン

MQとの連携

クライアント ⇔ MessageSight ⇔ バックエンドシステム(MQ)
クライアント
アプリ


MQ
サーバー
アプリ
MessageSight がMQクライアントとして、MQサーバーに接続
MQアプリケーションは、P2P、Pub/Sub どちらのMQIも利用可能

P2P:MQPUT/MQGET、PubSub:MQPUB/MQSUB/MQGET
インフラ視点(MQ)


MessageSight 上にMQコネクションを設定
MessageSightでMQTT⇔MQ 変換のためのマッピング・ルールを設定


16
MQ
アプリケーション視点: プロトコルはMQ


MQTT
MessageSight上でプロトコル変換
MQサーバー側でMessageSight 接続を設定(サーバー接続チャネル)
© 2014 IBM Corporation
トポロジーパターン

ESBとの連携

クライアント ⇔ MessageSight ⇔ バックエンドシステム(IIB)
SOAP/HTTP
JMS
クライアント
アプリ
MQTT
MQ
既存システム
(Webサービス)
IIB
メッセージフロー
外部システム
DB

アプリケーション視点: プロトコルはJMS、MQ





17
ESB(IIB)を経由することで、既存アプリケーションは追加・変更なしに連携できる
IIB提供の入出力ノード(部品)を利用して、容易にデータを送受信可能
JMS
: MessageSight がJMSプロバイダーになる
MQ
: MessageSight がMQクライアントとして、MQサーバーに接続
インフラ視点

JMS

MQ
: IIB側にMessageSight が提供するJMS Classファイルを導入
: IIB側にMessageSight をJMSプロバイダーとして設定
: MessageSight 上にJMSプロトコル利用を設定(MessageHub)
: MessageSight 上にMQコネクションを設定
: MessageSightでMQTT⇔MQ 変換用のマッピング・ルールを設定
MQサーバー側でMessageSight 接続を設定(サーバー接続チャネル)
© 2014 IBM Corporation
トポロジーパターン

ストリームデータ処理(InfoSphere Streams)との連携

クライアント → MessageSight → バックエンドシステム(Streams)
クライアント
アプリ
MQTT
MQTT
Streams
サーバー
アプリ
DB
ストリームデータ処理により、リアルタイムなデータ分析と予測が可能
 大量のパブリッシュ・データを複合イベントとして処理





プロトコルはMQTT

18
データを抽出、結合して、必要なデータのみをバックエンドシステムに連携
時系列データの平均値、最大値の計算など
SPL(Streams Processing Language)言語
Streams のMQTTアダプタを利用
© 2014 IBM Corporation
可用性構成(参考)

トポロジー構成が決まったら、可用性構成を検討する

MessageSight のHigh Availability構成

Primary と Standby のペアにより構成



Primary がメッセージを処理
Standby は Primaryと同一の構成
データの複製は同期的に行われる

メッセージと構成情報をメモリー上で高速に同期(RoCE)注
Primary
Memory Replication
Standby
注)RoCE (RDMA over Converged Ethernet): ロスレスのEthernet規格拡張
RDMA(Remote Direct Memory Access):CPUの干渉なしに直接メモリアクセス
19
© 2014 IBM Corporation
論理設計
ここでは、MQTTとしての設計を行う
20
© 2014 IBM Corporation
論理設計
システムグランドデザイン
要件整理
設計パターンの整理
トポロジー設計
論理設計
トピック/ペイロード設計
パブリッシャー設計
サブスクライバー設計
外部連携設計
1.トピック/ペイロード設計
物理設計
MessageSightオブジェクト定義設計
ユーザ/グループ定義設計
クライアント設計
外部連携設計
•
•
送受信されるペイロードの設計
トピック構造の設計
2.パブリッシャー設計
•
Pub/Sub連携における送信アプリケーションの設計
3.サブスクライバー設計
•
Pub/Sub連携における受信アプリケーションの設計
4.外部連携設計
•
21
バックエンドシステム連携の設計
© 2014 IBM Corporation
トピック/ペイロード設計における基本事項
システムグランドデザイン
要件整理
設計パターンの整理
トポロジー設計
論理設計
トピック/ペイロード設計
パブリッシャー設計
サブスクライバー設計
外部連携設計
物理設計

MessageSightオブジェクト定義設計
ユーザ/グループ定義設計
送受信情報
クライアント設計
外部連携設計
トピック・ストリング ・・・・・ パブリッシュ/サブスクライブされる情報を識別する文字列
 ペイロード(メッセージ) ・・・・ データそのもの。バイナリー・データとして扱われる


パブリッシャー


Pub/Subブローカーに対して、トピック・ストリングを指定して、メッセージをパブリッシュ
サブスクライバー

Pub/Subブローカーに対して、トピック・ストリングを指定してサブスクライブ
 Pub/Subブローカーから、トピック・ストリングとペイロードを受信
サブスクライブ
XXX/YYY/#
トピック
トピック・ストリング
ペイロード
BRK
S
サブスクライバー
ペイロード:Hello!!
トピック:XXX/YYY/ZZZ
ブローカー
サブスクライバーの受信情報
22
© 2014 IBM Corporation
トピック/ペイロード設計

トピック・ストリングの目的
送受信するペイロードを分類する
 サブスクライバーが欲しい情報を的確に指定できるようにする


トピックの設計指針
送受信する”データ構造”を考え、何をトピックにするかを決定する
 サブスクライバーが欲しい情報だけを入手できる構造
 分類目的では必要最小限が妥当


トピック設計による影響

構造が大雑把だと


構造が細かいと


欲しい情報が複数のトピックにまたがり、複数のサブスクライブをする必要がある
階層が多いと


23
欲しい情報だけでなく、不要な情報も送られ、受信側で選別する必要が出てくる
トピック・ストリングとして流れるデータ量が多くなる
トピック指定がわかりにくくなる
© 2014 IBM Corporation
トピック/ペイロード設計

パターン別の設計ポイント
パターン
パターン小分類
設計ポイント
1:1
Point-to-Point
受け取るべきサブスクライバー以外が受け取らない仕組みが必要
・サブスクライバー単位のトピック
Fan-in
パブリッシャーが誰かを知る必要がある場合はその仕組みが必要
・パブリッシャー単位のトピック
・ペイロードにパブリッシャー情報を付加
すべてのメッセージを1つのサブスクライバーが受け取るか
・負荷分散方式の検討
Fan-out
最も多くのサブスクライバーがサブスクライブしたい情報の塊は何か
・トピック・ストリングの構造
Any-to-Any
複数のパブリッシャーのペイロードの種類
必要なメッセージを入手できるトピック・ストリングの粒度
1:N
リクエスト&リプライ
24
リプライのリクエストへの紐付けはどうするか
・リクエストに識別子が必要
・リクエスト識別子単位のリプライ用トピック
・ペイロードにリクエスト識別子を含める
リプライが誰からのものか知る必要がある場合はその仕組みが必要
© 2014 IBM Corporation
トピック/ペイロード設計
トピックおよびペイロードを設計する手順の流れを示す
将来の構造修正を最小化するための検討である
メッセージを選択する
条件項目を決める
ペイロードを決める
1
•
送るペイロードに含めるデータ
とその構造を決定する
•
5
整合性を確認し、必要が
あれば見直す
•
トピック・ストリングの
構造を決定する
•
25
2
トピック・ストリングを構成する
各項目の順序を決定する
4
サブスクライバーの視点で、受け
取るデータを絞り込むための条
件を決める
決まったトピック・ストリングを
もとにペイロードを見直す
3
拡張性を考慮して
項目を追加する
•
後々追加される要件も考慮し、
変更が最小限になるようあらかじ
め追加項目を検討する
© 2014 IBM Corporation
トピック/ペイロード設計の流れ

1
STEP1 ペイロードを決める

ペイロードに含める要素を決める



パブリッシャー、サブスクライバー間で連携したい情報を列挙
文字もバイナリも可能
1つのペイロードに入れるか、別のペイロードにするか検討

組み合わせ(セットになる)要素は、1つのペイロードに収める


2つのトピックのデータに組み合わせであることを明示できない
独立の要素が、独立のタイミングで発生する場合には、別々のペイロードとする
A1
P
A2
A3
A4
B2
B1
S
どのAとどのBがセ
ットなんだ?
A情報とB情報を送るよ
P
26
A0-B1 A1-B1
A2-B1 A3-B1
A3-B2
A4-B2
S
どのタイミングで
変わったんだ?
© 2014 IBM Corporation
トピック/ペイロード設計の流れ


送信者情報は必要か




1つのトピックに複数のパブリッシャーがパブリッシュする場合(Fan-inパターン)
トピックストリングに依存
他のメッセージとの紐付け情報は必要か

リクエストに対するリプライの場合など
日付、時刻、場所などの情報は必要か


送信データが時刻依存である場合、トピック・ストリングに時刻情報がなければ必要
接続オプションによっては、即時に受け取るとは限らない
だれから送信されたか
知りたい・・・
S
P
cust001
P
cust002
P
cust003
P
cust004
response
自分が送ったリクエスト“req001”に対して、
クライアント“cust001”からの応答だな!
27
1
STEP1 ペイロードを決める(つづき)
送信者、時刻、リクエストIDのある例
<message>
<sender>cust001</sender>
<requestid>req0001</publisher>
<date>2014/04/09</date>
<time>11:11:11</time>
<response>150</response>
</message>
© 2014 IBM Corporation
トピック/ペイロード設計の流れ

1
STEP1 ペイロードを決める(つづき)

構造を決める


XML、CSV、固定長データなど
要因1:アプリケーションの要件


要因2:MQTTデバイス要件


既存アプリケーション、連携アプリケーション
処理能力、通信帯域、電力消費量
要因1と要因2のバランスが取れない場合は、連携ミドルウェア等で変換
SOAPは送らないんだ
が・・・・
SOAPならそのまま受
け取れるんだが・・・・
JMS
クライアント
アプリ
MQTT
Pub/Sub
ブローカー
MQ
SOAP/HTTP
既存システム
(Webサービス)
IIB
メッセージフロー
外部システム
私がSOAPに変換
しましょう
28
DB
© 2014 IBM Corporation
トピック/ペイロード設計の流れ

2
STEP2 メッセージを選択する条件項目を決める

サブスクライバーが必要なメッセージのみを受信できるように条件項目を選択


条件項目が細か過ぎると、複数のサブスクライブを発行しなければならない
条件項目が粗すぎると、欲しいデータ以外のデータも受け取ることになる
 サブスクライバーが受け取った後、必要なデータを選別する必要が発生する
 必要ないデータのために通信量が増える
中央区に関するデータがほしい
P
箱崎
箱崎
箱崎
XXX
XX
XX
中央区に関するデータ
をそろえるためには・・・
箱崎、XXXを条件に指定
P
P
中央区
中央区
東京都の各地に関す
るデータを送信
29
港区
中央区
新宿区
渋谷区
中央区
中央区
中央区
S
中央区
中央区
箱崎
XXX
S
S
中央区
港区
選別
渋谷区
目黒区 新宿区
中央区
中央区
中央区
中央区だけ
ほしい
© 2014 IBM Corporation
トピック/ペイロード設計の流れ

2
STEP2 メッセージを選択する条件項目を決める(つづき)

サブスクライブできる人を特定したい場合は、トピックに条件項目を追加する
(例)スポーツ大会での選手と事務局との連絡/通知アプリケーション
P
S
001
S
002
S
101
S
102
S
renraku
P
S
S
・個々の選手への連絡を選手番号宛にパブリッシュ
・特定の選手への配信ができない

パブリッシャーを特定したい場合、トピックまたはペイロードにパブリッシャー情報を含める
P
S
ペイロードに
パブリッシャー
情報
001
P
002
P
P
101
P
P
102
P
P
renraku
・選手側からの通知に利用する場合は、
ペイロードに選手情報を含めることで可能
30
S
S
自分自身の
トピックに対し
てパブリッシュ
・選手は自分専用のトピックに通知をパブリッシュする
ことで、事務局側はだれからの通知か認識できる
© 2014 IBM Corporation
トピック/ペイロード設計の流れ

3
STEP3 拡張性を考慮して項目を追加する
ルート要素は、1つである必要はない
 後々追加する処理も想定して、分離できるようにトピック項目を追加


今は1種類だが、将来は複数になる場所がキーポイント
東京オリンピック以外の
開催でも利用しよう
tennis
001
31
tokyo
tennis
100m
100m
men
women
men
men
women
men
result
result
result
result
result
result
002
101
102
002
001
002
101
102
002
© 2014 IBM Corporation
トピック/ペイロード設計の流れ

STEP4 トピック・ストリングの構造を作成する

決まった条件項目(トピック項目)を並べて順序を決定


完全はない。より多くの場合によい結果を生むように決定
サブスクライバーがまとめてサブスクライブすると想定される項目を上位にする

マルチレベル・ワイルドカード(#)のほうが、単一レベル・ワイルドカード(+)より効率がよい
テニスの結果が知りたい
tennis/#
tennis
001
男子の結果が知りたい
men/#
どっちが主流か・・・・
men
100m
wemen
men
women
men
tennis
100m
tennis
result
result
result
result
result
result
002
101
102
男子の結果が知りたい
+/men/#
32
4
002
001
002
101
102
002
テニスの結果が知りたい
+/tennis/#
© 2014 IBM Corporation
トピック/ペイロード設計の流れ

STEP4 トピック・ストリングの構造を作成する(つづき)

同じレベルの項目は、トピック・ストリング上も同じレベルになるようにする

1度のサブスクライブで要求できるように
でも、男子の項目を入れれば、
例えば、”すもう”には男子しかな
いので・・・・
tennis
001
sumou
tennis
sumou
men
women
result
men
women
men
result
result
002
result
result
result
002
101
102
男子の結果が知りたい
+/men/#
では、すもうはもれてしまう
33
4
001
+/men/#
Sumou/#
の2回のサブスクライブ
002
101
102
002
+/men/#
の1回のサブスクライブで
可能
© 2014 IBM Corporation
トピック/ペイロード設計の流れ

5
STEP5 トピック・ストリングとペイロードの整合性を確認し、必要があれば見直す

トピック・ストリングの設計の結果、ペイロードに影響が出ていれば修正

ペイロードの情報の一部が、トピック・ストリングの項目として出た場合
この部分をどうするか
トピック・ストリング
ペイロード
サブスクライバーの受信情報



34
基本的に、重複を取り除く (情報量の観点から重複は無駄)
但し、問題検知のため1項目程度、冗長にしておく(重ねる)のが理想
ペイロードを修正したあと、そのペイロードでトピック・ストリングに影響がないか確認
© 2014 IBM Corporation
システムグランドデザイン
パブリッシャー設計
要件整理
設計パターンの整理
トポロジー設計
論理設計
トピック/ペイロード設計
パブリッシャー設計
サブスクライバー設計
要件から設計要素にマッピングする
外部連携設計
物理設計
MessageSightオブジェクト定義設計
ユーザ/グループ定義設計
クライアント設計
外部連携設計
35
検討内容
設計内容
ブローカーの宛先はどこか?冗長構成にするか
宛先制御方法
自分を一意に指定する名前は何か
クライアントID
パブリッシュする宛先はどこか
トピック・ストリング
接続完了までどれくらい待てるか
接続タイムアウト値
接続の切断をすばやく検知したいか
KeepAlive値
ユーザー認証を行うか
ユーザー名、パスワード
送信する情報は見られたらまずいか
SSLの利用
接続が切れたとき何か通知したいか
遺言メッセージを使用
メッセージの保証はどうするか
QoSの値
後からサブスクライブしたクライアントにも、
最新のメッセージを送りたいか
リテイン・メッセージの使用
© 2014 IBM Corporation
パブリッシャー設計
① 後からサブスクライブしたクライアントにも、直近のメッセージを送るか

送る場合
“リテイン”を指定する
パブリッシャー
ブローカー サブスクライバー
メッセージA
•
•

サブスクライバーがそのトピックをサブスクライブすると、必ず1
度メッセージを受け取る
状態を保持するトピックへのパブリッシュに有効
送らない場合
サブスクライブ
メッセージA
メッセージB
“リテイン”を指定せず
パブリッシャー
•
•
•
36
メッセージB
メッセージがパブリッシュされたトピックに、その時接続している
サブスクライバーだけが受け取る
サブスクライバーがそのトピックをサブスクライブすると、その後
にパブリッシュされたメッセージを受け取る
過去の情報には意味がないトピックへのパブリッシュに有効
ブローカー サブスクライバー
メッセージA
サブスクライブ
メッセージB
メッセージB
© 2014 IBM Corporation
パブリッシャー設計
② メッセージの保証をどうするか

届かない場合があっても許容できる場合
•
•

1度だけ送信する。届かない場合もありうる。届かない場合も検知できない
効率を良くしたい場合や、送信しなおして遅れて届いても無意味または後の送信メッセージで補完できる場
合に有効
届かないことは許容できないが、2度届くことは許容できる場合
•
•
•

QoS=0
必ず1回は届ける。複数回届くこともありうる。届かない場合はエラーとして検知する
サブスクライバーが重複受信を想定する必要がある
効率は良くしたいが、メッセージが欠けることは許されない場合に有効
届かないことも、2度届くことも許容できない場合
•
•
QoS=1
QoS=2
必ずちょうど1回届ける。複数回届くこともはなく、届かない場合はエラーとして検知する
かなり効率が落ちることを想定する必要がある
(送達保証のため、送り側と受け側の間を2往復の通信が発生する)
37
© 2014 IBM Corporation
パブリッシャー設計
② メッセージの保証をどうするか(つづき)
パブリッシャーでは、さらに以下の点を考慮し、QoSを何にするか決定する



メッセージは、どのような情報か(状態なのか差分なのか)
QoSの指定は、メッセージ単位である
指定するQoSの指定は、パブリッシャー・サーバー間の指定であり、サブスクライバー
にこのQoSで届くとは限らない


サブスクライバーが受け取るメッセージのQoSは、サブスクライバーが指定
但し、パブリッシャーが指定したQoSより大きくなることはない
サブスクライブ(QoS=2)
パブリッシュ(QoS=1)
BRK
P
S
受信メッセージ(QoS=1)
サブスクライブ(QoS=0)
パブリッシュ(QoS=1)
P
BRK
S
受信メッセージ(QoS=0)
38
© 2014 IBM Corporation
システムグランドデザイン
サブスクライバー設計
要件整理
設計パターンの整理
トポロジー設計
論理設計
トピック/ペイロード設計
パブリッシャー設計
サブスクライバー設計
要件から設計要素にマッピングする
外部連携設計
物理設計
MessageSightオブジェクト定義設計
ユーザ/グループ定義設計
クライアント設計
外部連携設計
39
検討内容
適用内容
ブローカーの宛先は?冗長構成にするか
宛先制御方法
自分を一意に指定する名前は何か
クライアントID
サブスクライブする宛先はどこか?複数あるか
ワイルドカードで指定できるか
トピックストリング
接続完了までどれくらい待てるか
接続タイムアウト値
接続の切断をすばやく検知したいか
KeepAlive値
ユーザー認証を行うか
ユーザー名、パスワード
受信する情報は見られたらまずいか
SSLの利用
接続が切れたとき何か通知したいか
遺言メッセージを使用
メッセージの保証はどうするか
QoSの値
切断している最中にパブリッシュされたメッセージも、再接続後
に受け取りたいか
デュラブル・サブスクリプション
© 2014 IBM Corporation
サブスクライバー設計
① 接続が切れている間のメッセージをどうするか

パブリッシャー
再接続時に受け取りたい場合
ブローカー サブスクライバー
メッセージA
サブスクライブ
メッセージA
デュラブル・サブスクリプション
•
•
•

(永続サブスクリプション)
ノン・デュラブル・サブスクリプション
•
•
切断
接続
接続が切れても、サブスクライブは保持される方法
1度サブスクライブしたトピックへのメッセージは、切断中も保持
されていて、再接続時に受け取ることができる
遅れても、すべてのメッセージを受け取りたい場合に有効
接続がきれている間のメッセージはいらない場合
•
メッセージB
メッセージC
メッセージB
メッセージC
パブリッシャー
ブローカー サブスクライバー
メッセージA
(非永続サブスクリプション)
接続が切れると、サブスクライブ自体も消去される方法
切断中にパブリッシュされたメッセージは受け取ることができない
遅れて受け取っても意味がない場合に有効
サブスクライブ
メッセージA
メッセージB
切断
接続
メッセージC
サブスクライブ
メッセージC
(注意)デュラブル・サブスクリプションの指定は“サブスクリプション”単位ではなく、“接続”単位なので、1つ
の接続中の複数サブスクリプションの設定を異なるものにはできない
再接続時に、再度デュラブル・サブスクリプションを指定しない場合、保持していたメッセージは破棄される
40
© 2014 IBM Corporation
サブスクライバー設計
② メッセージの保証をどうするか


サブスクライバーでも、パブリッシャーと同様にQoS決定

届かない場合があっても許容できる場合

届かないことは許容できないが、2度届くことは許容できる場合

届かないことも、2度届くことも許容できない場合
QoS=0
QoS=1
QoS=2
但し、サブスクライバーの場合、以下の点を考慮
•
•
QoSの指定は、サブスクライブ単位である
指定するQoSの指定は、ブローカー、サブスクライバー間の指定であり、サブスクライバーにこの
QoSで届くとは限らない
サブスクライバーが受け取るメッセージのQoS
41
パブリッシャーが
指定するQoS
サブスクライバーが指定するQoS
QoS=0
QoS=1
QoS=2
QoS=0
QoS=0
QoS=0
QoS=0
QoS=1
QoS=0
QoS=1
QoS=1
QoS=2
QoS=0
QoS=1
QoS=2
© 2014 IBM Corporation
サブスクライバー設計
③ 全体構造
サブスクライブ
(トピックA)
複数のサブスクライブが必要になる場合


1つのトピック・ストリングで必要なサブスクライブができな
い場合
デュラブル・サブスクリプションなど接続単位の設定は、
複数のサブスクリプションすべてに適用されることを留意
BRK
サブスクライブ
(トピックB)
複数の接続が必要になる場合
サブスクライブ毎に設定を変えたい場合(デュラブル・サ
ブスクリプションなど)
 クライアントIDは異なるものにする必要がある
サブスクライブ
(トピックA)

負荷分散が必要になる場合


42
S
S
BRK
サブスクライブ
(トピックB)
S
1つのサブスクライバーですべてのメッセージの処理がで
きない場合
共用サブスクリプション、MQコネクティビティを利用
(外部連携を参照)
© 2014 IBM Corporation
要件整理
システムグランドデザイン
外部システム連携設計
設計パターンの整理
トポロジー設計
論理設計
トピック/ペイロード設計
パブリッシャー設計
サブスクライバー設計
連携方向
外部連携設計
物理設計
MessageSightオブジェクト定義設計
ユーザ/グループ定義設計
•
•
クライアント設計
Pub/Subブローカーからバックエンドシステムへ(Fan-in)
バックエンドシステムからPub/Subブローカーへ(Fan-out)
外部連携設計
連携方式


Fan-outの場合、1toN ( Pub/Subブローカーまでは1to1)
Fan-inの場合、複数の方式が可能
 1to1 ・・・・・・・・・ 1つのバックエンドシステムが受け取り処理する
 1toN ・・・・・・・・・ 複数のバックエンドシステムが同時に受け取り、それぞ
れの処理をする。後から追加することも容易
 負荷分散 ・・・・・ 複数のバックエンドシステムのうち1つだけが受け取り処
理する(1to1)
P
P
P
P
P
43
P
P
BRK
1:1
S
P
BRK
S
S
P
P
P
P
1:N
S
BRK
S
負荷分散
© 2014 IBM Corporation
物理設計
ここでは、MessageSightへの実装を考慮した設計を行う
44
© 2014 IBM Corporation
物理設計
要件整理
システムグランドデザイン
設計パターンの整理
トポロジー設計
論理設計
トピック/ペイロード設計
パブリッシャー設計
サブスクライバー設計
1.MessageSightオブジェクト定義設計
外部連携設計
物理設計
MessageSightオブジェクト定義設計
ユーザ/グループ定義設計
•
•
クライアント設計
MessageSightへのアクセス方法の定義設計
MessageHub内のEndpointと各ポリシーの構成でのアクセス制御設計
外部連携設計
2.ユーザ/グループ定義設計
•
•
認証・認可の元データとなるユーザー/グループの定義設計
LDAPまたは、MessageSightローカルの定義設計
3.クライアント設計
•
クライアントとなるパブリッシャーまたはサブスクライバー・アプリケーションの設計
4.外部連携設計
•
バックエンドシステムとのメッセージ連携の設計
その他
•
•
45
通信経路設計(SSL,証明書等)
運用・監視設計
© 2014 IBM Corporation
システムグランドデザイン
MessageSightオブジェクト
要件整理
設計パターンの整理
トポロジー設計
論理設計
トピック/ペイロード設計
パブリッシャー設計
サブスクライバー設計
外部連携設計
MessageSightに定義するオブジェクトの包含関係
物理設計
MessageSightオブジェクト定義設計
ユーザ/グループ定義設計
クライアント設計
外部連携設計
MessageSight
MessageHub
Endpoint
(NIC,Port)
Messaging
Messaging
Policy
Messaging
Policy
Policy
46
Endpoint
(NIC,Port)
接続
Connection
Policy
Connection
Policy
Endpoint
(NIC,Port)
接続
Messa
ging
Policy
Conne
ction
Policy
© 2014 IBM Corporation
MessageSightオブジェクト設計
4つのオブジェクトの設定方法
オブジェクト
設定方法
MessageHub
・定義体の入れ物。アプリケーション単位に作成がお勧め
・EndPointはそのMessageHub内のどのPolicyも利用可
(Endpointは他のMessageHubのPolicyは参照不可)
・MessageHubをまたがってトピックはアクセスされる
Endpoint
・NIC(IPアドレス)およびポート毎の定義体
(どのNICのどのポートからのリクエストを受け付けるかを指定)
・1つのMessageHub内に複数定義可能
MessagingPolicy
・誰が、どの宛先(トピック/キュー)に、どうアクセスできるかを指定
・宛先は、トピック/キューの別、その名称(ワイルドカード可)を指定
ConnectionPolicy
・誰が接続できるかを指定
設計順序
MessageHub
47
Endpoint
Connection
Policy
Messaging
Policy
© 2014 IBM Corporation
MessageSightオブジェクト定義
各オブジェクトの定期項目と定義内容
オブジェクト
定義項目
MessageHub
名前
任意名称
ConnectionPolicy
名前
任意名称
クライアント制限
MessagingPolicy
IP address、ClientId、UserId、
GroupId、CertificateName、
Protocol(JMS/MQTT)
定義内容
有無とその値
名前
任意名称
宛先タイプ
Topic/Queue/Globalshared Subscription
認可
Publish、Subscribe、Send、
Receive、Browse、Control
有無
非接続クライアント通
知
有無
宛先
認可文字列
最大メッセージ数
数値
クライアント制限
48
サブ定義項目
IP adress、ClientId、UserId、
GroupId、CertificateName、
Protocol(JMS/MQTT)
有無とその値
© 2014 IBM Corporation
MessageSightオブジェクト定義
各オブジェクトの定期項目と定義内容
オブジェクト
定義項目
サブ定義項目
EndPoint
名前
任意名称
有効フラグ
有効無効
ポート
受付ポート番号
IPアドレス
受付IPアドレス(ALL選択可)
プロトコル
JMS、MQTT
定義内容
有無
最大メッセージサイズ
数値
SecurityPolicy
定義済みセキュリティポリシーから選択
ConnectionPolicy
定義済みセキュリティポリシーから選択
MessagingPolicy
定義済みセキュリティポリシーから選択
定義順序は下図の順が効率がよい
MessageHub
49
Connection
Policy
Messaging
Policy
Endpoint
© 2014 IBM Corporation
MessageSightオブジェクト定義

MessagingPolicyでのトピック指定
ワイルドカード “*” を使った指定が可能
 3つの変数を使用可能




${UserID}
${ClinetID}
${CommonName} (SSL証明書使用時)
item
【例】ユーザー毎にトピックを用意する場合、トピックにUserId
を含めることで、認可定義が容易
• item/tracking/tp${UserID}
tracking
tpuser1
tpuser2
tpuser3
tpuser4
•
UserId:user1さんは、item/tracking/tpuser1にアクセス可能
ClientIdとUserId
ClientId ・・・・・ 接続を区別するためのId。1つのUserIdで複数のClientId可
クライアント全体でユニークである必要がある
クライアントが任意に設定できるので、認可には不向き
UserId ・・・・・・ 認証・認可に使用するユーザー識別のId
50
© 2014 IBM Corporation
要件整理
システムグランドデザイン
ユーザー/グループ設計
設計パターンの整理
トポロジー設計
論理設計
トピック/ペイロード設計
パブリッシャー設計
サブスクライバー設計
外部連携設計
物理設計
MessageSightオブジェクト定義設計
ユーザ/グループ定義設計

ユーザーIDで認証を行う場合に必要


外部連携設計
通信経路でSSLを行う場合でも、サーバー認証のみ行い、クライアント認証は
ユーザーID/パスワードで行うことが多い
MessageSightオブジェクトで、ユーザーIDまたはグループIDで認可を行うこと
が可能
オブジェクト
定義項目
定義内容
ユーザー
ユーザーID
任意ID
グループ・メンバーシップ
グループ定義から選択
パスワード
任意文字列
グループID
任意ID
グループ・メンバーシップ
グループ定義から選択 (階層化が可能)
グループ
51
クライアント設計
© 2014 IBM Corporation
システムグランドデザイン
パブリッシャー設計
要件整理
設計パターンの整理
トポロジー設計
論理設計
トピック/ペイロード設計
パブリッシャー設計
パブリッシャーの処理の流れ
サブスクライバー設計
外部連携設計
物理設計
MessageSightオブジェクト定義設計
ユーザ/グループ定義設計
クライアント設計
外部連携設計
接続
トピック指定
•
MQTTサーバー(Pub/Subブローカー)に、
各種オプションを指定して接続
•
メッセージを送りたいトピックを指定
複数のトピックを指定することも可能
•
•
メッセージ
送信
•
•
メッセージをトピックに対して送信
そのトピックに複数のメッセージを送ることも可能
別のトピックに対して別または同じメッセージを送ることも可
能(繰り返し)
凡例
繰り返し範囲
52
© 2014 IBM Corporation
パブリッシャー設計
パブリッシャーに対する要件に合わせた設計
検討内容
適用内容
適用先
宛先制御方法
URL(address:port)
接続
クライアントID
ClientId
接続
トピックストリング
Topic
トピック
接続タイムアウト値
ConnectionTimeout
接続
KeepAlive値
KeepAliveInterval
接続
ユーザー名、パスワード
UserName
UserPassword
接続
SSLの利用
SSLproperty
接続
遺言メッセージを使用
Will指定
接続
QoSの値
QoS指定
メッセージ
リテインメッセージ
Retained指定
メッセージ
53
© 2014 IBM Corporation
【参考】パブリッシャー設計 ~ コード・イメージ
package com.ibm.mq.id;
import org.eclipse.paho.client.mqttv3.*;
public class PubAsync {
public static void main(String[] args) {
try {
MqttClient client = new MqttClient("tcp://192.168.11.11:16102”, "clientId001");
MqttTopic topic = client.getTopic(“test");
MqttMessage message = new MqttMessage("Hello World“.getBytes());
message.setQos(1);
message.setRetained(true);
リテイン・パブリケーション
CallBack callback = new CallBack("clientId001");
client.setCallback(callback);
MqttConnectOptions option = new MqttConnectOptions();
option.setKeepAliveInterval(60);
option.setConnectionTimeout(10000);
option.setUserName(“username”);
option.setPassword(“password”.toCharArray());
client.connect(option);
MqttDeliveryToken token = topic.publish(message);
if (client.isConnected()) client.disconnect(10000);
} catch (Exception e) {
e.printStackTrace();
}
接続先を指定
トピックを指定
ペイロードをを指定
メッセージ・オプションを指定
接続オプションを指定
接続
パブリッシュ
接続を解除
}
}
54
© 2014 IBM Corporation
【参考】パブリッシャー設計 ~ コード・イメージ
コールバック用クラス(CallBack.java)
package com.ibm.mq.id;
import org.eclipse.paho.client.mqttv3.MqttClient;
public class CallBack implements MqttCallback {
private String instanceData = "";
コールバックの定義
public CallBack(String instance) {
instanceData = instance;
}
public void messageArrived(MqttTopic topic, MqttMessage message) {
メッセージ受信時の処理
// メッセージ受信時の処理。メッセージを受信してそのハンドリング
}
public void connectionLost(Throwable cause) {
接続が切れた時の処理
// コネクションが切れたときの処理(再接続など)
}
public void deliveryComplete(MqttDeliveryToken token) {
パブリッシュが完了した時の処理
// メッセージのパブリッシュが完了した時の処理
}
}
55
© 2014 IBM Corporation
サブスクライバー設計
サブスクライバーの処理の流れ
接続
トピック指定
サブスクライブ
メッセージ
受信
•
MQTTサーバー(Pub/Subブローカー)に、
各種オプションを指定して接続
•
•
メッセージを受け取りたいトピックを指定
複数のトピックを指定することも可能
ワイルドカードを使ってトピックを指定することも可能
•
トピックに対してサブスクライブを送信
•
メッセージ(ペイロード)と、そのメッセージがパブリッシュされた
トピックストリングを受信
アンサブスクライブするまで受信(繰り返し)
•
•
凡例
繰り返し範囲
56
© 2014 IBM Corporation
サブスクライバー設計
サブスクライバーに対する要件に合わせた設計
検討内容
適用内容
適用先
宛先制御方法
URL(address:port)
接続
クライアントID
ClientId
接続
トピックストリング
Topic
サブスクライブ
接続タイムアウト値
ConnectionTimeout
接続
KeepAlive値
KeepAliveInterval
接続
ユーザー名、パスワード
UserName
UserPassword
接続
SSLの利用
SSLproperty
接続
遺言メッセージを使用
Will指定
接続
QoSの値
QoS指定
サブスクライブ
デュラブル・サブスクリプション
CleanSession指定
接続
57
© 2014 IBM Corporation
【参考】サブスクライバー設計 ~ コード・イメージ
package com.ibm.mq.id;
import org.eclipse.paho.client.mqttv3.MqttClient;
public class SubAsync {
public static void main(String[] args) {
try {
MqttClient client = new MqttClient("tcp://192.168.11.11:16102", "clientId001");
CallBack callback = new CallBack("clientId001");
client.setCallback(callback);
MqttConnectOptions option = new MqttConnectOptions();
option.setCleanSession(false);
option.setKeepAliveInterval(60);
デュラブル・サブスクリプション
option.setConnectionTimeout(10000);
option.setUserName(“username”);
option.setPassword(“password”.toCharArray());
client.connect(option);
client.subscribe(“test”, 1);
Thread.sleep(30000);
client.disconnect();
} catch (Exception e) {
e.printStackTrace();
}
接続先を指定
非同期呼び出しプログラム設定
接続オプションを指定
接続
サブスクライブ
(トピック、QoSの指定)
接続を解除
}
58 }
© 2014 IBM Corporation
外部システム連携設計
システムグランドデザイン
要件整理
設計パターンの整理
トポロジー設計
論理設計
トピック/ペイロード設計
パブリッシャー設計
プロトコル別の設計
サブスクライバー設計
外部連携設計
物理設計
MessageSightオブジェクト定義設計
ユーザ/グループ定義設計

MQTT


クライアント設計
外部連携設計
クライアントがMQTTの場合と同様に構成
JMS(Pub/Sub)

MessageSightオブジェクト(エンドポイント、コネクション・ポリシー、メッセージング・
ポリシー)で、JMSを受け付けるよう設定
 メッセージング・ポリシーで、操作(バブリッシュ、サブスクライブなど)の認可を設定
 JMSアプリケーションでは、トピックを指定して、MessageSightに対してパブリッシュ
またはサブスクライブを実行

MQ

MessageSightのMQコネクティビティを設定



59
サブスクライバー
キュー Putter
パブリッシャー
キュー Getter
キューマネージャー・コネクションで、キューマネージャーを指定
デスティネーション・マッピング・ルールで、どこからどこに転送するかを指定
MQアプリケーションでは、通常のMQアプリケーションと同様に、キューに対して操作
© 2014 IBM Corporation
外部システム連携設計
負荷分散方式の設計
Fan-inパターンで、サブスクライバーであるサーバー側で負荷分散したい場合の連携方式

複数のサブスクライバーの1つがメッセージを受けとることの目的

負荷分散として機能させる(サブスクライバー側の意図)


Fan-in型のパターンで、サブスクライバーであるサーバー側の処理が1つではまかないきれない場
合など
メッセージ割り当てとして機能させる(パブリッシャー側の意図)

複数のサブスクライバー宛にパブリッシュするが、そのうちの1つに受け取ってもらいたい場合など
S
方法1の場合
パブリッシュ(リクエスト)
P
サブスクライブ
S
BRK
今、処理可能
リクエスト

席をはずすので、処理できない
から、サブスクライブしないよ
S
今、処理可能
負荷分散実現方法
方法1.JMS2.0による共用サブスクリプション
 方法2.MQコネクティビティ

60
© 2014 IBM Corporation
外部システム連携設計(JMS)

JMS連携

JMS:J2EEにおける標準メッセージング・インターフェース
 ポイント・ツー・ポイント、パブリッシュ/ サブスクライブ型をサポート

MQTTとの相違点

QoS(MQTT)とパーシステンシー(JMS)
 共用サブスクリプション(JMS2.0のみ)
JMSからMQTTに送信した場合、
パーシステンシーがQoSに変換される
MQTTからJMSに送信した場合、
QoSがパーシステンシーに変換される
(パブリッシャーがJMS、サブスクライバーがMQTT)
(パブリッシャーがMQTT、サブスクライバーがJMS)
JMS \ MQTT
QoS=0
QoS=1
QoS=2
MQTT
JMS
NON-PERSISTENT
0
1
1
QoS=0
NON-PERSISTENT
PERSISTENT
0
1
2
QoS=1
PERSISTENT
QoS=2
PERSISTENT
(検証環境での確認結果)
61
© 2014 IBM Corporation
外部システム連携設計(JMS)
JMS連携の定義項目と定義内容
オブジェクト
定義項目
定義内容
コネクション
名前
任意名称
コネクション名
IPアドレスとポート番号
トピック名
トピック名
リテイン・メッセージ
指定の有無
デュラブル・サブスクリプション
指定の有無
JNDI
コンテキストファクトリー
コネクションファクトリー
プロバイダーURL
プロバイダー・ユーザーID
プロバイダー・パスワード
メッセージ
メッセージ型
TextMessage、ObjectMessage、
MapMessage、BytesMessage、
StreamMessage
パーシステンシー
パーシステント/ ノンパーシステント
ペイロード
送信する情報
※別途、JMS接続の認可設定がMessageSightに必要
62
© 2014 IBM Corporation
【参考】JMSパブリッシャー設計 ~ コード・イメージ
パブリッシュ用クラス (JMSPublish.java)
package com.ibm.mq.jms;
import javax.jms.*;
import com.ibm.ima.jms.*;
public class JMSPublish {
public static void main(String[] args) {
try {
ConnectionFactory connectionFactory =
ImaJmsFactory.createConnectionFactory(“tcp”,
“192.168.111.20, 16100”, “clientId001”);
Connection connection = connectionFactory.createConnection();
Session session = connection.createSession(false,
Session.DUPS_OK_ACKNOWLEDGE);
Destination dest = session.createTopic(“test/hoge/”);
MessageProducer producer = session.createProducer(dest);
producer.setDeliveryMode(DeliveryMode.NON_PERSISTENT);
TextMessage tmsg = session.createTextMessage(“hello World!”);
producer.send(tmsg);
connection.close();
} catch (JMSException e) {
//例外処理
} finally {
//クローズ処理
}
}
63
接続先を指定
接続の確立
セッションの確立
トピックを指定
送信オプションを指定
ペイロードをを指定
パブリッシュ
接続を切断
© 2014 IBM Corporation
【参考】JMSサブスクライバー設計 ~ コード・イメージ - 同期型
サブスクライブ用クラス (JMSSubscribe.java)
package com.ibm.mq.jms;
import javax.jms.*;
import com.ibm.ima.jms.ImaJmsFactory;
public class JMSSubscribe {
public static void main(String[] args) {
try {
ConnectionFactory connectionFactory=
ImaJmsFactory.createConnectionFactory(“tcp”,
“192.168.111.20”, 16100, “clientId001”);
Connection connection = connectionFactory.createConnection();
Session = connection.createSession(false,
Session.DUPS_OK_ACKNOWLEDGE);
Destination dest = session.createTopic(test/hoge/);
MessageConsumer consumer = session.createConsumer(dest);
connection.start();
Message msg = consumer.receive(10000);
//受信処理
} catch (Exception e) {
//例外処理
} finally {
//クローズ処理
}
}
}
64
接続先を指定
接続の確立
セッションの確立
トピックを指定
サブスクライブ
メッセージを受信
接続の切断
© 2014 IBM Corporation
【参考】JMSサブスクライバー設計 ~ コード・イメージ - 非同期型
サブスクライブ用クラス (AsyncJMSSubscribe.java)
package com.ibm.mq.jms;
import javax.jms.*;
import com.ibm.ima.jms.ImaJmsFactory;
public class AsyncJMSSubscribe implements MessageListener {
public static void main(String[] args) {
try {
ConnectionFactory connectionFactory =ImaJmsFactory
.createConnectionFactory(“tcp”, “192.168.111.20”,16100, “clientId001”);
Connection connection = connectionFactory.createConnection();
Session session=connection.createSession
(false,Session.DUPS_OK_ACKNOWLEDGE);
Destination dest = session.createTopic(“test/hoge/”);
MessageConsumer consumer = session.createConsumer(dest);
AsyncJMSSubscribe asyncReceiver = new AsyncJMSSubscribe();
consumer.setMessageListener(asyncReceiver);
connection.start();
for (int i = 0; i < 10; i++){
//メッセージの待ち受け処理
}
} catch (Exception e) {
//例外処理
}
}
@Override
public void onMessage(Message msg) {
//メッセージ受信処理
}
}
65
接続先を指定
接続の確立
セッション・オプションを指定
トピックを指定
サブスクライブ
接続の切断
メッセージ受信
© 2014 IBM Corporation
外部システム連携(JMS)
負荷分散方式: 共有サブスクリプション
JMS2.0からの新機能
共用サブスクリプションの種類

1つのコネクションを共用してサブスクリプションを共用(クライアントIDは1つ)


複数のスレッドでメッセージの処理を分散したい場合
複数のコネクションでサブスクリプションを共用(クライアントIDは複数)

複数のシステムでメッセージの処理を分散したい場合
JMSアプリケーションでは
共有サブスクリプションのためのメソッドを利用
 負荷分散の対象から外す場合、サブスクリプションをアン・サブスクライブ

MessageSight
Message1
Publisher
JMS Subscriber
S
JMS Subscriber
S
JMS Subscriber
Message1
P
Message2
66
Topic
S
Message2
© 2014 IBM Corporation
【参考】サブスクライバーの分類
MessageSightでのサブスクライバーの種類
67
検討内容
特徴
プロトコル
(非共有)ノンデュラブル・
サブスクリプション
・通常のサブスクリプション
MQTT
JMS
(非共有)デュラブル・
サブスクリプション
・通常のデュラブル・サブスクリプション
MQTT
JMS
プライベート共有ノンデュラブル・
サブスクリプション
・1つのコネクションを共用した同一のサブスクリプション
・クライアントIDは1つ
JMS2.0のみ
プライベート共有デュラブル・
サブスクリプション
・1つのコネクションを共用した同一のデュラブル・サブス
クリプション
・クライアントIDは1つ
JMS2.0のみ
グローバル共有ノンデュラブル・
サブスクリプション
・複数のコネクション間での同一のサブスクリプション
・クライアントIDは個別
JMS2.0のみ
グローバル共有デュラブル・
サブスクリプション
・複数のコネクション間での同一のデュラブル・サブスクリ
プション
・クライアントIDは個別
JMS2.0のみ
© 2014 IBM Corporation
外部システム連携設計(MQ)

MQ連携(MQコネクティビティ)
外部のWebSphere MQのキューマネージャーとの間でメッセージの連携が可能
 MessageSihgtのデスティネーション・マッピング・ルールで指定
 既存のMQを利用したシステムとの連携を容易に実現できる

向きは2方向
MQ
MessageSight
または
MQ
MessageSight
(注意)
MessageSight内のトピックとキュー
の間のマッピングはできない
変換パターンは7種類
Topic
Topic subtree
Queue
68
Topic
Topic subtree
Queue
© 2014 IBM Corporation
外部システム連携設計(MQ)
MQ連携の定期項目と定義内容
オブジェクト
定義項目
名前
キューマネー
ジャー・コネクション キューマネージャー
任意名称
接続先キューマネージャー名
コネクション名
IPアドレスとポート番号
チャネル名
チャネル名(SVRCONN)
SSL Cipher Spec
SSL用Ciper Specification (最大32文字)
デスティネーション・ 名前
マッピング・ルール
ルールタイプ
69
定義内容
任意名称
14種類のルールタイプから選択
ソース
送信元トピックまたはキュー
宛先
送信先トピックまたはキュー
最大メッセージ数
数値
リテイン・メッセージ
有無
有効化
有無
キューマネージャー・コネクション名
定義済みキューマネージャー・コネクションから
選択(複数可)
© 2014 IBM Corporation
外部システム連携設計(MQ)

MQ連携を負荷分散に利用
キューマネージャー・コネクションを複数作成
 デスティネーション・マッピング・ルールで、複数のキューマネージャー・コネクションを指定
 各キューマネージャーには、同一名のキューが必要
 各キューには分散配信される

デスティネーション・マッピング・ルー
ルで、トピックからキューに変換
各キューマネージャーには、
同一のキューが必要
キューマネージャー毎に、キューマ
ネージャー・コネクションを
MessageSightに定義
MessageSight
Message1
Publisher
QMR1
Queue1
QMR2
Queue1
QMR3
Message1
P
Message2
70
Topic
Queue1
Message2
© 2014 IBM Corporation
まとめ
 設計の鍵
どういうパターン、トポロジーにするか
 どんなペイロードにするか
 どういうトピック構造にするか
 アプリケーションでどんなオプションを使うか

 MQTT
 MQTT/Websocket
Enterprise Applications
 MessageHUB
 User&Group
MQ
MQTT
Client
Applications
MessageSight
DMZ
71
JMS Java SE
Client
 Destination Mapping Rule
(MQコネクティビティ)
Services
 WebGUI/CLI(SSH)
© 2014 IBM Corporation
© Copyright IBM Corporation 2014. All rights reserved. The information contained in these materials is provided for informational purposes only, and is provided AS IS without warranty of any kind,
express or implied. IBM shall not be responsible for any damages arising out of the use of, or otherwise related to, these materials. Nothing contained in these materials is intended to, nor shall have
the effect of, creating any warranties or representations from IBM or its suppliers or licensors, or altering the terms and conditions of the applicable license agreement governing the use of IBM
software. References in these materials to IBM products, programs, or services do not imply that they will be available in all countries in which IBM operates. Product release dates and/or capabilities
referenced in these materials may change at any time at IBM’s sole discretion based on market opportunities or other factors, and are not intended to be a commitment to future product or feature
availability in any way. IBM, the IBM logo, and other IBM products and services are trademarks of the International Business Machines Corporation, in the United States, other countries or both. Other
company, product, or service names may be trademarks or service marks of others.
72
© 2014 IBM Corporation
Fly UP