More Related Content
More from Tatsuaki Sakai (8)
Asynchronous Messaging入門(第4回実施分)
- 12. Microsoft Azureのメッセージキュー
• Service Bus Queue
• 256KB以下のメッセージを送受信
• 格納されたメッセージは永続化される
• キューの最大サイズは5GB
• パーティション分割時におけるキューの最大サイズは80GB(5×16)
• 作成可能なキュー数は最大10,000/名前空間
(パーティション分割キューは最大100)
• ローカルトランザクションをサポート
- 13. QueueストレージとService Bus Queue
の比較(一例)
比較条件 Microsoft Azure キュー Service Bus キュー
順序の保証 × ○ 先入れ先出し (FIFO)
配信保証 At-Least-Once
At-Least-Once
At-Most-Once
トランザクションのサ
ポート
× ○ (ローカル トランザクションを使用)
受信動作 非ブロッキング
ブロッキング (タイムアウトあり/なし)
非ブロッキング (.NET マネージ API のみを使用)
受信モード Peek & Lease
Peek & Lock
Receive & Delete
排他アクセス モード リース ベース ロック ベース
リース/ロックの期間
30 秒 (既定)
7 日 (最大)
60 秒 (既定)
リース/ロックの粒度 メッセージ レベル キュー レベル
一括受信
○ メッセージ数 (最大 32)
を明示的に指定)
○ (プレフェッチ プロパティを有効 orトランザクションを使用)
一括送信 × ○ (トランザクションまたはクライアント側のバッチ処理を使用)
http://msdn.microsoft.com/ja-jp/library/hh767287.aspx
- 30. 実装に関する検討事項
• メッセージのグループ化
– 理想的にはすべてのメッセージは独立すべき
– 要件上の制約で複数のメッセージをグループ化する場合
• 大容量のメッセージを分割する必要がある場合
• 複数の独立したメッセージをセットで利用する必要がある場合
– Service Bus QueueではSession IDが利用可能
• プロパティを指定
• 関連するメッセージをセッションに配置
• 同一Session IDを持つメッセージはロックされ他ユーザからの
参照をブロック
- 31. 実装に関する検討事項
• 冪(べき)等性
– 同じメッセージが複数回配信される可能性がある
• 処理の大半が完了しているタイミングでの障害発生等
• 同じ処理を繰り返しても同じ結果が得られるように
– 冪等性を実現するためのアイディア例
• メッセージにユニークなIDを付与
• メッセージ処理開始時点で状態ストアへ処理状態を問い合わせ
• 存在しない場合に当該メッセージIDを「処理中」として記録
• 既に処理中である場合、処理中止 or 補正トランザクション実行
• 処理完了時に状態ストアをクリア