JMSを使ってみよう

6,253 views

Published on

WebLogic ServerでJMSアプリケーションを使用する方法を紹介します。メッセージングの概念や基本的なJMSプログラミングの方法からWebLogic ServerにおけるJMSサービスの設定方法までWebLogic ServerでJMSアプリケーションを使用するまでの基本的な流れを解説します。 日本オラクル オラクル ユニバーシティ 
岡田 大輔

Published in: Technology
  • Be the first to comment

JMSを使ってみよう

  1. 1. <Insert Picture Here>JMSを使ってみよう日本オラクル株式会社 オラクルユニバーシティ岡田 大輔2012年08月30日
  2. 2. 以下の事項は、弊社の一般的な製品の方向性に関する概要を説明するものです。また、情報提供を唯一の目的とするものであり、いかなる契約にも組み込むことはできません。以下の事項は、マテリアルやコード、機能を提供することをコミットメント(確約)するものではないため、購買決定を行う際の判断材料になさらないで下さい。オラクル製品に関して記載されている機能の開発、リリースおよび時期については、弊社の裁量により決定されます。OracleとJavaは、Oracle Corporation 及びその子会社、関連会社の米国及びその他の国における登録商標です。文中の社名、商品名等は各社の商標または登録商標である場合があります。 Copyright© 2012, Oracle. All rights reserved. 2
  3. 3. Agenda• JMS概要• WebLogic JMSの設定• JMS設定のポイント Copyright© 2012, Oracle. All rights reserved. 3
  4. 4. JMSとは• Java Messaging Services • Javaからメッセージング・サービスを利用するための標準API • Java EE 6: JMS 1.1• WebLogic ServerはJMSプロバイダとしてメッセージ ング・サービスを提供する Copyright© 2012, Oracle. All rights reserved. 4
  5. 5. JMSのアーキテクチャ JMSクライアント JMSクライアント(メッセージ・プロデューサ) JMSプロバイダ (メッセージ・コンシューマ) Producer Consumer Producer Consumer アプリケーション A アプリケーション B JMSメッセージ JMSメッセージ JMSに対応したメッセージングシステムの実装(MOM)JMSプロバイダ またはMOMサービスをJava EEに提供する機能 JMS APIを使用してメッセージの送受信を行うプログラム。JMSクライアント 送信側はプロデューサ、受信側はコンシューマと呼ぶJMSメッセージ JMSクライアント間でやり取りされるデータ Copyright© 2012, Oracle. All rights reserved. 5
  6. 6. JMSプロバイダ• メッセージングサービスへの接続情報を提供する • JMS接続ファクトリ • JMS送り先 • 参照情報がJNDIにバインドされる(管理オブジェクト) WebLogic Server JMSプロバイダJMSプロバイダを構成 JNDI (メッセージング・サービス)するとJNDIに管理オブジェクトが登録される JMSサーバ QueueX JMS接続ファクトリ TopicX Copyright© 2012, Oracle. All rights reserved. 6
  7. 7. メッセージングタイプ NOTE: JMSメッセージの送受信方式をPTPドメイン 『メッセージング・ドメイン』 と呼びます。 WebLogic Serverのドメインと• ポイント・ツー・ポイント は無関係です。 • 1対1のメッセージング (プルモデル) • メッセージは特定のキュー・レシーバにのみ配信される • メッセージはキューで管理 メッセージ・コンシューマメッセージ・プロデューサ (キュー・レシーバ) (キュー・センダ) メッセージ・キュー アプリケーション B-1 アプリケーション A アプリケーション B-2 JMSメッセージ JMSメッセージ アプリケーション B-3 Copyright© 2012, Oracle. All rights reserved. 7
  8. 8. メッセージング・タイプPub/Subドメイン• パブリッシュ・サブスクライブ • 1対多のメッセージング (プッシュモデル) • メッセージはすべてのトピック・サブスクライバに配信さ れる • メッセージはトピックで管理 メッセージ・コンシューマメッセージ・プロデューサ (トピック・サブスクライバ)(トピック・パブリッシャ) メッセージ・トピック アプリケーション B-1 アプリケーション A アプリケーション B-2 JMSメッセージ JMSメッセージ アプリケーション B-3 Copyright© 2012, Oracle. All rights reserved. 8
  9. 9. JMSプログラミングの流れJMSクライアント JMSクライアント(メッセージ・プロデューサ) (メッセージ・コンシューマ) ConnectionFactory createConnection Connection createSessionMessageProducer Session MessageConsumer createMessage Message send receive Destination JNDIルックアップ Copyright© 2012, Oracle. All rights reserved. 9
  10. 10. JMSメッセージの構造• メッセージはヘッダ、プロパティ、ボディから構成 される • JMSヘッダ Headers メッセージ・コンシューマで利用でき JMSDestination, JMACorrelationID, る標準のヘッダー・フィールド JMSDeliveryMode, JMSExpiration … • JMSプロパティ Properties JMS仕様: JMSX… 送信側アプリケーションによって追加 ... されたヘッダー・フィールド アプリケーション固有のカスタム・プ Body ロパティも定義可能 Message StreamMessage • ボディ BytesMessage メッセージ本文。送信する内容によっ ObjectMessage て選択 MapMessage (WLSではXMLMessageも使用可) TextMessage Copyright© 2012, Oracle. All rights reserved. 10
  11. 11. JMSクライアント例:プロデューサ@Resource(mappedName = "jms/connectionFactory")private ConnectionFactory factory; 1. JMS管理オブジェクト(接続ファク トリと送り先)をJNDIルックアップ@Resource(mappedName = "jms/demoQueue")private Destination destination;public void sendMessage(String payload) { 2. Conectionを生成してSession, Connection conn = null; MessageProducerを生成 try { conn = factory.createConnection(); Session session = conn.createSession(false, Session.AUTO_ACKNOWLEDGE); MessageProducer producer = session.createProducer(destination); TextMessage message = session.createTextMessage(); message.setText(payload); producer.send(message); 3. メッセージ送信 } catch (JMSException e) { // 例外処理 } finally { // クローズ処理 4. クローズ処理を忘れずに }} Copyright© 2012, Oracle. All rights reserved. 11
  12. 12. JMSクライアント例: コンシューマ 1. JMS管理オブジェクト(接続ファク トリと送り先)のルックアップはEJB コンテナが制御@MessageDriven(mappedName = "jms/demoQueue")public class SessionReceiver implements MessageListener { @Override 2. MessageListenerインタフェースの メソッドonMessageをオーバーライ public void onMessage(Message message) { ド try { TextMessage txtMsg = (TextMessage) message; String payload = txtMsg.getText(); System.out.println("*** MDB received msg: " + payload); } catch (JMSException e) { // 例外処理 3. Messageを任意の型にキャストし て受信処理 } }} Copyright© 2012, Oracle. All rights reserved. 12
  13. 13. まとめ• JMSはメッセージング・サービスにアクセスするため の標準API • 2つのメッセージング方式(PTP, Pub/Sub)をサポート • JMSクライアントはJMS管理オブジェクトを取得してメッセ ージングを行う • JMS接続ファクトリ • 送り先 • JMSプロバイダを構成するとアプリケーションサーバのJNDI に管理オブジェクトがバインドされる Copyright© 2012, Oracle. All rights reserved. 13
  14. 14. Agenda• JMS概要• WebLogic JMSの設定• JMS設定のポイント Copyright© 2012, Oracle. All rights reserved. 14
  15. 15. WebLogic ServerでJMSを使えるようにす るには? • JMSプロバイダの設定を行う • WebLogic Serverのメッセージングサービスを使用する場合 • JMSサーバ • JMSモジュール <jmsmodule>-jms.xml DomainMBean JMSBean ServerMBean QueueBean TemplateBean JMSServerMBean TopicBean DestinationKeyBean JMSSystemResource JMSConnection ForeignServerBean MBean FactoryBean SubDeployment QuotaBean etcconfig.xml MBean Copyright© 2012, Oracle. All rights reserved. 15
  16. 16. JMSサーバとJMSモジュール• JMSサーバ • メッセージング・サービス • 特定のサーバ上でのみアクティブになる固定サービス• JMSモジュール • JMSサーバで使用するリソースをまとめたもの • 送り先、割り当て、接続ファクトリ … • デプロイメント対象はサーバ単位(複数サーバ指定可) • 異なるスコープを指定する場合はサブデプロイメント を使用 Copyright© 2012, Oracle. All rights reserved. 16
  17. 17. 設定 – JMSサーバーの作成 デプロイ対象は特定のサーバ Copyright© 2012, Oracle. All rights reserved. 17
  18. 18. 設定 – JMSモジュールの作成 ディスクリプタ名とドメイン内の 場所は空欄でOK $DOMAIN/config/jms配下に作成 される Copyright© 2012, Oracle. All rights reserved. 18
  19. 19. 設定 – JMSリソースの作成 Copyright© 2012, Oracle. All rights reserved. 19
  20. 20. 接続ファクトリ JMS接続がJTAトランザクションに参加する場合 は有効化 Copyright© 2012, Oracle. All rights reserved. 20
  21. 21. 送り先 トピックも作成方法は同じ 送り先の作成時は必ず [次] を選択 Copyright© 2012, Oracle. All rights reserved. 21
  22. 22. リソースの対象指定• サブデプロイメント / 高度な対象指定 • JMSモジュールとは異なるデプロイメント・スコープを指定 する場合に使用する (同じ場合は不要) • 送り先(キュー/トピック)では必須 サプデプロイメントが定義されてい ない場合は作成 Copyright© 2012, Oracle. All rights reserved. 22
  23. 23. サブデプロイメントの作成 任意の名前を指定 Copyright© 2012, Oracle. All rights reserved. 23
  24. 24. まとめ: JMSサーバとJMSモジュール JMSモジュールのデプロイ対象はサー バ単位なので複数サーバ上のJMSサー バで共有可能 JMSサーバA JMSモジュール1 キューXJMSサーバは固定サービスのためサーバごとに定義 トピックX JMS接続ファクトリ テンプレート WebLogic Server 割当 WebLogic Server JMSサーバB キューやトピックはJMSサーバ毎に作 られるためサブデプロイメントが必要 キューY JMSモジュールと同じ対象指定を使用 トピックY できるリソースにはサブデプロイメン トは不要 Copyright© 2012, Oracle. All rights reserved. 24
  25. 25. モニタ – JMSサーバ 送り先の制御: (休止・再開可能) 生成 - JMSクライアントがメッセージを作成・送信 挿入 - 送り先にメッセージを配置 消費 - JMSクライアントがメッセージを受信 Copyright© 2012, Oracle. All rights reserved. 25
  26. 26. モニタ – 送り先 Copyright© 2012, Oracle. All rights reserved. 26
  27. 27. JMSメッセージの表示送り先に滞留しているメッセージが表示される送り先のメッセージは[削除]や[移動]可能 Copyright© 2012, Oracle. All rights reserved. 27
  28. 28. まとめ:• WebLogic ServerでJMSサービスを使用するには • JMSサーバを設定 • JMSモジュールを設定 • 必要に応じてJMSリソースを定義 • JMSリソースの種類によってはサブデプロイメントが必要• JMSは固定サービス • 複数のサーバでJMSを使う場合はサーバごとにJMSサーバを 定義する必要がある Copyright© 2012, Oracle. All rights reserved. 28
  29. 29. Agenda• JMS概要• WebLogic JMSの設定• JMS設定のポイント Copyright© 2012, Oracle. All rights reserved. 29
  30. 30. 問題: 1• ここまでの設定を行ったJMSサーバにメッセージが滞 留した状態でサーバが再起動するとどうなる? a. メッセージは再起動後も保持される b. メッセージは消失する Copyright© 2012, Oracle. All rights reserved. 30
  31. 31. JMSで設定しておきたいこと①• 永続メッセージング • デフォルトのJMSメッセージングは永続化されない • サーバ障害時はメッセージが消失する • 非同期処理では致命的な問題 • JMSサーバはメッセージを永続化可能 • 永続ストアを設定して、JMSサーバごとに指定 • 永続方式はJDBC / File • 信頼性の高いストアを選択する • メッセージングの永続化指定 • 接続ファクトリ: デフォルト配信モードは永続 • JMSクライアント: Message. setJMSDeliveryMode(int) • デフォルトは永続(DeliveryMode.PERSISTENT) • 送り先: 永続モードをオーバライド可能 Copyright© 2012, Oracle. All rights reserved. 31
  32. 32. 永続メッセージング JMSクライアント JMSクライアント(メッセージ・プロデューサ) JMSプロバイダ (メッセージ・コンシューマ) Consumer Consumer アプリケーション A アプリケーション B JMSメッセージ JMSメッセージ 送信完了時には サーバ停止時に永続化されて メッセージは永 いたメッセージはサーバ再起 続化された状態 動後に使用可能 永続ストア Copyright© 2012, Oracle. All rights reserved. 32
  33. 33. 永続ストアの作成 永続ストアを定義したらJMSサーバ で永続ストアを指定 非XAドライバでデータソースを作成 JDBCストアで生成されるテーブルの接頭辞 テーブル名は <prefix>WLSTORE Copyright© 2012, Oracle. All rights reserved. 33
  34. 34. 恒久サブスクリプション• Pub/Subではサブスクライバが非アクティブ時のイベ ントは受信できない • 恒久サブスクライバを使うと非アクティブ時のメッセージを 後から受信可能 メッセージ・コンシューマメッセージ・プロデューサ (恒久サブスクライバ)(トピック・パブリッシャ) メッセージ・トピック Subscribe アプリケーション B-1 アプリケーション A アプリケーション B-2 JMSメッセージ JMSメッセージ アプリケーション B-3 すべての恒久サブスクライバ 恒久サブスクライバはサブス にメッセージ配信するまで永 クリプションIDを通知 続ストアで保持 永続ストア Copyright© 2012, Oracle. All rights reserved. 34
  35. 35. 問題: 2• JMSサーバが保持できるメッセージ数/サイズに上限 は設定できるか? a. できる b. できない Copyright© 2012, Oracle. All rights reserved. 35
  36. 36. JMSで設定しておきたいこと②• 割当(Quota) • JMSサーバはWLS上のメモリリソースを消費 • メッセージが多数滞留するとそれだけヒープを消費する • JMSサーバ単位: JMSサーバのプロパティ • 送り先単位: JMSリソース JMSサーバ キューメッセージ・プロデューサ(トピック・パブリッシャ) 割当を超える メッセージは アプリケーション A 受け付けない JMSメッセージ 割当 WebLogic Server Copyright© 2012, Oracle. All rights reserved. 36
  37. 37. 割当の設定 割当を超過した時のメッセージ処理ポリシー FIFO(先入れ先出し) – 着順に処理 PREEMPTIVE(割り込み) – 処理できる順 割当を定義したら送り先で指定する Copyright© 2012, Oracle. All rights reserved. 37
  38. 38. 問題: 3• コンシューマが処理できないメッセージはデフォル トではどうなる? a. 送り先から削除される b. 送り先から削除されない Copyright© 2012, Oracle. All rights reserved. 38
  39. 39. JMSで設定しておきたいこと③• 再配信制限 • JMSコンシューマが正常に処理できないメッセージは送り先 に不正に滞留し続ける (ポイズン・メッセージ) • メッセージの存続時間が0(無制限)だとメッセージは消えない • 送り先毎に再配信の上限を設定可能 (デフォルトでは再配信 回数に制限はない) • 上限に達したメッセージの処理を選択可能 • 破棄(ログなし) • ログ(その後に破棄) • リダイレクト(エラー送り先) JMSクライアント JMSサーバ (メッセージ・コンシューマ) エラーになった メッセージは 送り先 送り先に滞留 例外 アプリケーション B JMSメッセージ Copyright© 2012, Oracle. All rights reserved. 39
  40. 40. 再配信制限 – 送り先 再配信までの遅延時間(ミリ秒) 再配信回数の上限: -1は制限なし 再配信を超えた場合の処理ポリシー: ログを選択する場合は[ロギング]でJMSロギン グを有効化しておく 有効期限ポリシーがリダイレクトの場合の送 り先を指定 Copyright© 2012, Oracle. All rights reserved. 40
  41. 41. メッセージの存続時間• JMSメッセージプロパティでメッセージの存続時間 (JMSTimeToLive)を指定可能 • 接続ファクトリ(デフォルト配信) / プロデューサで指定可能 • 送り先でオーバライド可能 Copyright© 2012, Oracle. All rights reserved. 41
  42. 42. こんなこともできます – 他のメッセージング・サービスとの連携• SAF (Store And Forward) • 2つのJMSサーバ間でメッセージ転送を行う機能 • メッセージ転送の信頼性はSAFサービスが保証• Messaging Bridge • JMSサーバとJCAアダプタで接続したメッセージング・サービ スとの間でメッセージ転送を行う機能 • JMS非対応のメッセージング・サービスとの連携 • WebLogic Server 8.1以下のJMSサーバとの連携• 外部JMSサーバ • 外部のJMS対応メッセージング・サービス(Oracle AQなど)を 参照するための設定 Copyright© 2012, Oracle. All rights reserved. 42
  43. 43. こんなこともできます - メッセージングの拡張機能• Unit of Order (順序単位) • メッセージの着順を保証する機能 • JMSサーバはコンシューマへのメッセージの配信順を制御 • 順序単位はプロデューサが定義する • 接続ファクトリの設定かWebLogic JMS APIで設定 • WLMessageProducer#setUnitOfOrder("myOrder")• Unit of Work(作業単位) • メッセージをグループ化する機能 • JMSサーバはUOWメッセージをひとかたまりのメッセージと してコンシューマに配信 • 作業単位はプロデューサがメッセージプロパティで指定 • JMS_BEA_UnitOfWork - UOW名 • JMS_BEA_UnitOfWorkSequenceNumber - UOWシーケンス番号 • JMS_BEA_IsUnitOfWorkEnd - UOW終端指定 Copyright© 2012, Oracle. All rights reserved. 43
  44. 44. まとめ• 設定しておきたいJMSリソースの設定 • 永続メッセージング • 永続ストア(ファイル/JDBC)は信頼性を第一に検討 • 割当 • JMSメッセージがヒープを専有し過ぎないための設定 • JMSサーバ、送り先毎に設定可能 • 再配信制限 • ポイズンメッセージを回避するための設定 • 要件に応じて有効期限ポリシーを選択 • メッセージの存続時間もあわせて検討 Copyright© 2012, Oracle. All rights reserved. 44
  45. 45. 今回のまとめ• WebLogic Serverはエンタープライズクラスのメッセ ージング環境を提供します • JMS標準仕様に則ったメッセージング • PTPドメイン, Pub/Subドメイン • 既存のJMS対応メッセージング・システムとの連携 • UOOやUOWによる最適化 • WebLogic JMS設定はアプリケーション側(API)とインフラ側( 設定)で設定できるものがあります • 設定に関する責任範囲を明確にしておきましょう Copyright© 2012, Oracle. All rights reserved. 45
  46. 46. Oracle Universityからのお知らせ• JMSの設定をはじめとしたWebLogic Serverの管理方 法を学習したい方に最適な研修コースをご提供して います。 • Classroomトレーニングだけでなく、Live Virtual Class、『Oracle ト レーニング・オンデマンド』など多様な受講形態から選択いただけ ます。 Copyright© 2012, Oracle. All rights reserved. 46
  47. 47. ミドルウェア Oracle WebLogic Server 11g: 管理 Oracle Application Gridの基盤を支える Oracle WebLogic Server 11gの管理コース! このコースでは、Web管理者がOracle WebLogic Server 11gのインストールおよび設定 する方法について説明します。Web管理者が管理コンソールやコマンドライン、および スクリプトツール(WLST)などを使用して、Java EEアプリケーションをOracle WebLogic Server 11gにデプロイする方法についても説明します。 その他に、Oracle WebLogic Server のWebインタフェースとしてOracle HTTP Serverを設 定する方法を解説し、またOracle WebLogic Serverクラスタを設定してアプリケーショ ンのフェイルオーバーとロードバランシングをサポートする方法を学習します。また、 WebLogic Server管理者の管理タスクの概要について説明します。 ■Oracle Fusion Middleware の概要 ■WebLogic Serverのアーキテクチャ ■Oracle WebLogic Serverのインストール ■管理コンソールおよび他の管理ツールの概要 ■WebLogic Server ドメインのコンフィグレーション ■Oracle WebLogic Server の管理およびロギングの使用コース内容 ■アプリケーションのデプロイ ■データソース、JDBCドライバ、接続プールの設定 ■JMS アプリケーションのコンフィグレーション ■WebLogic Serverの基本セキュリティのコンフィグレーション ■Oracle HTTP Server のコンフィグレーション ■Oracle WebLogic クラスタのコンフィグレーション ■バックアップおよびリカバリの管理 ■全体バックアップ、増分バックアップ ・Linux の基本コマンドおよびデスクトップのナビゲーション 受講 ・クライアント/サーバーの概念における TCP/IP ネットワークに関する基本的な知識前提条件 ・Java EE の基礎知識(サーブレットや JSP など) ※推奨 ・Oracle WebLogic Server 11g/12c管理者対象者 ・Javaアプリケーション開発者 5日間 次回開催日程 ■7/9(月) - 7 /13(金) トレーニングキャンパス青山コース日程 日程の詳細は Oracle University Webサイト にてご確認ください。 ■8/27(月) - 8/31(金) 三田(芝浦)会場受講料 定価¥363,825(税込) ※Oracle PartnerNetwork会員様は、パートナー割引価格で受講いただけます。 Copyright© 2012, Oracle. All rights reserved.
  48. 48. WebLogic Server勉強会 参加者の皆さまの特典http://education.oracle.co.jp/campaign_wlstudy/ Copyright© 2012, Oracle. All rights reserved. 48
  49. 49. Copyright© 2012, Oracle. All rights reserved.
  50. 50. Copyright© 2012, Oracle. All rights reserved. 50

×