- 複数のFlexクライアントとBlazeDSサーバの間で publish-subscribe のメッセージングが可能。
- JMSAdapter により JMS の queue や topic にブリッジ可能。
- クライアントからのメッセージをサーバ経由で別のクライアントに配送することが可能。
- サーバからメッセージをクライアントに配送することも可能。
- メッセージは、ユニークID、BlazeDSヘッダ、カスタムヘッダ、ボディ等で構成される。BlazeDSヘッダの先頭はDSという文字列。
- クライアントからメッセージを送信するには Producer コンポーネントを使用する。
- クライアントでメッセージを受信するには Consumer コンポーネントを使用する。
- Consumer は selector expression が使える。
- Producer と Consumer は subtopic information を追加可能。
- queue-based のメッセージングは、JMSAdapter に JMS Queue をバインディングすることにより可能。
- 以下、BlazeDS Server Architecture の図
- チャネルはReal-timeのものを使う。ポーリングでもOK。
- Message Service は message destinations のリストと、各 destination にサブスクライブしているクライアント情報を保持する。→ これって Session に持つのかな?
- 標準的なアダプタとして ActionScriptAdapter と JMSAdapter があり、その他のカスタムアダプタを自作することも可能。
- メッセージング系の設定は services-config.xmlにも書けるけど messaging-config.xml に書くのがオススメ。
Working with Producer components
クライアント側での Producer の書き方についての説明。
- 自動的にリトライする方法もあるが、複数回送信される可能性があるので、副作用のあるメッセージングは注意すること。
- 配送できたかよくわからんシチュは2つある。それは、Producer.requestTimeout プロパティの値を超えた場合と、応答が帰ってくる前にチャネルの接続が切れた場合。この場合、ErrorMessage.faultCode が ErrorMessage.MESSAGE_DELIVERY_IN_DOUBT になる。
- reconnectAttempts は、-1だと無限に再試行して、0だと再試行しない。
- reconnectInterval は再試行のインターバル。0だと再試行しない。
Working with Consumer components
クライアント側での Consumer の書き方についての説明。
- Consumer.subscribed プロパティは Flex クライアントが destination に subscribe したときに true になる。
- Consumer.connected プロパティは Flex クライアントがサーバに接続したときに true になる。
- resubscribeAttempts は、subscribe に失敗した際に fault イベントを返す前に何度リトライするかを設定する。-1は無限リトライ、0はリトライしない。→ これって、GAEのような負荷分散環境では必須ですね。まぁ、このような環境でメッセージングが使えるのが前提なんですが、調査してないのでわかりまてん。
- resubscribeInterval は リトライ間隔をミリ秒単位で設定する。0の場合はリトライをしない。
- AMFChannelのようなリアルタイムでないチャネルに polling-enabled を使用しないで使うこともできる。この場合、クライアント側で Consumer.receive() を自分から呼びに行けばOK。
Using a pair of Producer and Consumer components in an application
メッセージを送受信するクライアントアプリケーションの場合、同一の destination をもつ Producer と Consumer のペアができるという話。
Message filtering
メッセージのフィルタリングの話。
- Producer は メッセージヘッダや subtopic information に情報を付加できる。Consumer ではこの情報を元にクライテリアベースのフィルタリングができる。
- Consumer コンポーネントは subscribe するときにフィルタリング用のクライテリアをサーバに送信する。このようにして、実際にフィルタリングをする作業はサーバ側で行う。
- 注意書きとして、フィルタリング用の情報としてメッセージヘッダと subtopic の両方を同時に使用してはいけないと書かれている。→ なんでだろ?
- AsyncMessage.headers プロパティにヘッダ情報が格納される。これは連想配列で、キーがヘッダ名で値が文字列か数字となる。
- JMS もしくは DS という文字列で始まるヘッダ名は予約されているので使用禁止。
- Consumer の selector プロパティにフィルタリングの条件を記述する。これは SQL92 conditional expression syntax をベースにしている。たとえば selector="prop1 < 4" のような書き方ができる。
- mx.messaging.MultiTopicConsumer や mx.messaging.MultiTopicProducer を利用すると、複数の topic を単一のイベントハンドラで扱うことができます。
- JMSを使用する場合は subtopic は利用不可。→ 基本的に常にヘッダだけ使えば間違いないですね。
- subtopic 名は、destination 名にドット区切りでつける。Consumer 側はワイルドカードが使える。ワイルドカードは1つのトークンに閉じて適用される。"foo.*.baz" は "foo.bar.baz" と"foo.aaa.baz" にマッチするが、"foo.bar.cookie" にはマッチしない。
- subtopic を有効にするためには、destination の設定で以下のような指定が必要。
<allow-subtopics>true</allow-subtopics> <subtopic-separator>.</subtopic-separator>
Configuring the Messaging Service
設定の話いろいろ。
いろいろと設定項目があるので、きちんとおさえておきましょう。
0 件のコメント:
コメントを投稿