jmsを使ってみよう

50
<Insert Picture Here> JMSを使ってみよう 日本オラクル株式会社 オラクルユニバーシティ 岡田 大輔 20120830

Upload: oracle-fusion-middleware

Post on 02-Nov-2014

11 views

Category:

Technology


1 download

DESCRIPTION

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

TRANSCRIPT

<Insert Picture Here>

JMSを使ってみよう

日本オラクル株式会社 オラクルユニバーシティ 岡田 大輔 2012年08月30日

Copyright© 2012, Oracle. All rights reserved. 2

以下の事項は、弊社の一般的な製品の方向性に関する概要を説明するものです。また、情報提供を唯一の目的とするものであり、いかなる契約にも組み込むことはできません。以下の事項は、マテリアルやコード、機能を提供することをコミットメント(確約)するものではないため、購買決定を行う際の判断材料になさらないで下さい。オラクル製品に関して記載されている機能の開発、リリースおよび時期については、弊社の裁量により決定されます。

OracleとJavaは、Oracle Corporation 及びその子会社、関連会社の米国及びその他の国における登録商標です。文中の社名、商品名等は各社の商標または登録商標である場合があります。

Copyright© 2012, Oracle. All rights reserved.

Agenda

• JMS概要

• WebLogic JMSの設定

• JMS設定のポイント

3

Copyright© 2012, Oracle. All rights reserved.

JMSとは

• Java Messaging Services • Javaからメッセージング・サービスを利用するための標準API

• Java EE 6: JMS 1.1

• WebLogic ServerはJMSプロバイダとしてメッセージング・サービスを提供する

4

Copyright© 2012, Oracle. All rights reserved.

JMSのアーキテクチャ

5

Producer Consumer Producer Consumer アプリケーション A アプリケーション B

JMSクライアント (メッセージ・プロデューサ)

JMSクライアント (メッセージ・コンシューマ) JMSプロバイダ

JMSプロバイダ JMSに対応したメッセージングシステムの実装(MOM)

またはMOMサービスをJava EEに提供する機能

JMSクライアント JMS APIを使用してメッセージの送受信を行うプログラム。送信側はプロデューサ、受信側はコンシューマと呼ぶ

JMSメッセージ JMSクライアント間でやり取りされるデータ

JMSメッセージ JMSメッセージ

Copyright© 2012, Oracle. All rights reserved.

• メッセージングサービスへの接続情報を提供する

• JMS接続ファクトリ

• JMS送り先

• 参照情報がJNDIにバインドされる(管理オブジェクト)

WebLogic Server

JMSサーバ

QueueX

TopicX

JMS接続ファクトリ

JMSプロバイダ

6

JNDI JMSプロバイダを構成するとJNDIに管理オブジェクトが登録される

JMSプロバイダ (メッセージング・サービス)

Copyright© 2012, Oracle. All rights reserved.

メッセージングタイプ

PTPドメイン • ポイント・ツー・ポイント

• 1対1のメッセージング (プルモデル)

• メッセージは特定のキュー・レシーバにのみ配信される

• メッセージはキューで管理

7

アプリケーション B-1

アプリケーション B-2 アプリケーション A

アプリケーション B-3

メッセージ・プロデューサ (キュー・センダ)

メッセージ・コンシューマ (キュー・レシーバ) メッセージ・キュー

JMSメッセージ JMSメッセージ

NOTE:

JMSメッセージの送受信方式を『メッセージング・ドメイン』と呼びます。

WebLogic Serverのドメインとは無関係です。

Copyright© 2012, Oracle. All rights reserved.

メッセージング・タイプ

Pub/Subドメイン • パブリッシュ・サブスクライブ

• 1対多のメッセージング (プッシュモデル)

• メッセージはすべてのトピック・サブスクライバに配信される

• メッセージはトピックで管理

8

アプリケーション B-1

アプリケーション B-2 アプリケーション A

アプリケーション B-3

メッセージ・プロデューサ (トピック・パブリッシャ)

メッセージ・コンシューマ (トピック・サブスクライバ) メッセージ・トピック

JMSメッセージ JMSメッセージ

Copyright© 2012, Oracle. All rights reserved.

JMSクライアント (メッセージ・プロデューサ)

JMSクライアント (メッセージ・コンシューマ)

JMSプログラミングの流れ

9

createConnection

createSession

createMessage

send receive

Session

ConnectionFactory

Connection

Destination

Message

MessageProducer MessageConsumer

JNDIルックアップ

Copyright© 2012, Oracle. All rights reserved.

JMSメッセージの構造

• メッセージはヘッダ、プロパティ、ボディから構成される

10

Headers

JMSDestination, JMACorrelationID, JMSDeliveryMode, JMSExpiration …

Properties

JMS仕様: JMSX…

...

Body

Message

StreamMessage

BytesMessage

ObjectMessage

MapMessage

TextMessage

• JMSヘッダ

メッセージ・コンシューマで利用できる標準のヘッダー・フィールド

• JMSプロパティ

送信側アプリケーションによって追加されたヘッダー・フィールド アプリケーション固有のカスタム・プロパティも定義可能

•ボディ

メッセージ本文。送信する内容によって選択 (WLSではXMLMessageも使用可)

Copyright© 2012, Oracle. All rights reserved.

JMSクライアント例:プロデューサ

11

@Resource(mappedName = "jms/connectionFactory")

private ConnectionFactory factory;

@Resource(mappedName = "jms/demoQueue")

private Destination destination;

public void sendMessage(String payload) {

Connection conn = null;

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);

} catch (JMSException e) {

// 例外処理

} finally {

// クローズ処理

}

}

1. JMS管理オブジェクト(接続ファクトリと送り先)をJNDIルックアップ

2. Conectionを生成してSession, MessageProducerを生成

3. メッセージ送信

4. クローズ処理を忘れずに

Copyright© 2012, Oracle. All rights reserved.

JMSクライアント例: コンシューマ

12

@MessageDriven(mappedName = "jms/demoQueue")

public class SessionReceiver implements MessageListener {

@Override

public void onMessage(Message message) {

try {

TextMessage txtMsg = (TextMessage) message;

String payload = txtMsg.getText();

System.out.println("*** MDB received msg: " + payload);

} catch (JMSException e) {

// 例外処理

}

}

}

1. JMS管理オブジェクト(接続ファクトリと送り先)のルックアップはEJBコンテナが制御

2. MessageListenerインタフェースのメソッドonMessageをオーバーライド

3. Messageを任意の型にキャストして受信処理

Copyright© 2012, Oracle. All rights reserved.

まとめ

• JMSはメッセージング・サービスにアクセスするための標準API

• 2つのメッセージング方式(PTP, Pub/Sub)をサポート

• JMSクライアントはJMS管理オブジェクトを取得してメッセージングを行う

• JMS接続ファクトリ

• 送り先

• JMSプロバイダを構成するとアプリケーションサーバのJNDI

に管理オブジェクトがバインドされる

13

Copyright© 2012, Oracle. All rights reserved.

Agenda

• JMS概要

• WebLogic JMSの設定

• JMS設定のポイント

14

Copyright© 2012, Oracle. All rights reserved.

WebLogic ServerでJMSを使えるようにするには?

• JMSプロバイダの設定を行う

• WebLogic Serverのメッセージングサービスを使用する場合

• JMSサーバ

• JMSモジュール

15

JMSSystemResourceMBean

etc

ServerMBean

JMSServerMBean

JMSBean

SubDeployment MBean

QueueBean

TopicBean

JMSConnection FactoryBean

QuotaBean

TemplateBean

DestinationKeyBean

ForeignServerBean

DomainMBean

config.xml

<jmsmodule>-jms.xml

Copyright© 2012, Oracle. All rights reserved.

JMSサーバとJMSモジュール

• JMSサーバ

• メッセージング・サービス

• 特定のサーバ上でのみアクティブになる固定サービス

• JMSモジュール

• JMSサーバで使用するリソースをまとめたもの

• 送り先、割り当て、接続ファクトリ …

• デプロイメント対象はサーバ単位(複数サーバ指定可)

• 異なるスコープを指定する場合はサブデプロイメントを使用

16

Copyright© 2012, Oracle. All rights reserved.

設定 – JMSサーバーの作成

17

デプロイ対象は特定のサーバ

Copyright© 2012, Oracle. All rights reserved.

設定 – JMSモジュールの作成

18

ディスクリプタ名とドメイン内の場所は空欄でOK

$DOMAIN/config/jms配下に作成される

Copyright© 2012, Oracle. All rights reserved.

設定 – JMSリソースの作成

19

Copyright© 2012, Oracle. All rights reserved.

接続ファクトリ

20

JMS接続がJTAトランザクションに参加する場合は有効化

Copyright© 2012, Oracle. All rights reserved.

送り先

21

トピックも作成方法は同じ

送り先の作成時は必ず [次] を選択

Copyright© 2012, Oracle. All rights reserved.

リソースの対象指定

• サブデプロイメント / 高度な対象指定

• JMSモジュールとは異なるデプロイメント・スコープを指定する場合に使用する (同じ場合は不要)

• 送り先(キュー/トピック)では必須

22

サプデプロイメントが定義されていない場合は作成

Copyright© 2012, Oracle. All rights reserved.

サブデプロイメントの作成

23

任意の名前を指定

Copyright© 2012, Oracle. All rights reserved.

WebLogic Server

JMSサーバA

WebLogic Server JMSサーバB

JMSモジュール1

まとめ: JMSサーバとJMSモジュール

24

トピックX

キューY

トピックY

テンプレート

割当

JMS接続ファクトリ

キューX

JMSモジュールのデプロイ対象はサーバ単位なので複数サーバ上のJMSサーバで共有可能

JMSモジュールと同じ対象指定を使用できるリソースにはサブデプロイメントは不要

キューやトピックはJMSサーバ毎に作られるためサブデプロイメントが必要

JMSサーバは固定サービスのためサーバごとに定義

Copyright© 2012, Oracle. All rights reserved.

モニタ – JMSサーバ

25

送り先の制御: (休止・再開可能)

生成 - JMSクライアントがメッセージを作成・送信

挿入 - 送り先にメッセージを配置

消費 - JMSクライアントがメッセージを受信

Copyright© 2012, Oracle. All rights reserved.

モニタ – 送り先

26

Copyright© 2012, Oracle. All rights reserved.

JMSメッセージの表示

27

送り先に滞留しているメッセージが表示される

送り先のメッセージは[削除]や[移動]可能

Copyright© 2012, Oracle. All rights reserved.

まとめ:

• WebLogic ServerでJMSサービスを使用するには

• JMSサーバを設定

• JMSモジュールを設定

• 必要に応じてJMSリソースを定義

• JMSリソースの種類によってはサブデプロイメントが必要

• JMSは固定サービス

• 複数のサーバでJMSを使う場合はサーバごとにJMSサーバを定義する必要がある

28

Copyright© 2012, Oracle. All rights reserved.

Agenda

• JMS概要

• WebLogic JMSの設定

• JMS設定のポイント

29

Copyright© 2012, Oracle. All rights reserved.

問題: 1

• ここまでの設定を行ったJMSサーバにメッセージが滞留した状態でサーバが再起動するとどうなる?

a. メッセージは再起動後も保持される

b. メッセージは消失する

30

Copyright© 2012, Oracle. All rights reserved.

JMSで設定しておきたいこと①

• 永続メッセージング

• デフォルトのJMSメッセージングは永続化されない

• サーバ障害時はメッセージが消失する

• 非同期処理では致命的な問題

• JMSサーバはメッセージを永続化可能

• 永続ストアを設定して、JMSサーバごとに指定

• 永続方式はJDBC / File

• 信頼性の高いストアを選択する

• メッセージングの永続化指定

• 接続ファクトリ: デフォルト配信モードは永続

• JMSクライアント: Message. setJMSDeliveryMode(int)

• デフォルトは永続(DeliveryMode.PERSISTENT)

• 送り先: 永続モードをオーバライド可能

31

Copyright© 2012, Oracle. All rights reserved.

永続メッセージング

32

Consumer Consumer

アプリケーション A アプリケーション B

JMSクライアント (メッセージ・プロデューサ)

JMSクライアント (メッセージ・コンシューマ) JMSプロバイダ

JMSメッセージ JMSメッセージ

永続ストア

送信完了時にはメッセージは永続化された状態

サーバ停止時に永続化されていたメッセージはサーバ再起動後に使用可能

Copyright© 2012, Oracle. All rights reserved.

永続ストアの作成

33

非XAドライバでデータソースを作成

JDBCストアで生成されるテーブルの接頭辞

テーブル名は <prefix>WLSTORE

永続ストアを定義したらJMSサーバで永続ストアを指定

Copyright© 2012, Oracle. All rights reserved.

• Pub/Subではサブスクライバが非アクティブ時のイベントは受信できない

• 恒久サブスクライバを使うと非アクティブ時のメッセージを後から受信可能

恒久サブスクリプション

34

アプリケーション B-1

アプリケーション B-2 アプリケーション A

アプリケーション B-3

メッセージ・プロデューサ (トピック・パブリッシャ)

メッセージ・コンシューマ (恒久サブスクライバ) メッセージ・トピック

JMSメッセージ JMSメッセージ

永続ストア

恒久サブスクライバはサブスクリプションIDを通知

Subscribe

すべての恒久サブスクライバにメッセージ配信するまで永続ストアで保持

Copyright© 2012, Oracle. All rights reserved.

問題: 2

• JMSサーバが保持できるメッセージ数/サイズに上限は設定できるか?

a. できる

b. できない

35

Copyright© 2012, Oracle. All rights reserved.

WebLogic Server

• 割当(Quota)

• JMSサーバはWLS上のメモリリソースを消費

• メッセージが多数滞留するとそれだけヒープを消費する

• JMSサーバ単位: JMSサーバのプロパティ

• 送り先単位: JMSリソース

JMSサーバ

キュー

JMSで設定しておきたいこと②

36

アプリケーション A

メッセージ・プロデューサ (トピック・パブリッシャ)

JMSメッセージ 割当

割当を超える メッセージは 受け付けない

Copyright© 2012, Oracle. All rights reserved.

割当の設定

37

割当を超過した時のメッセージ処理ポリシー

FIFO(先入れ先出し) – 着順に処理

PREEMPTIVE(割り込み) – 処理できる順

割当を定義したら送り先で指定する

Copyright© 2012, Oracle. All rights reserved.

問題: 3

• コンシューマが処理できないメッセージはデフォルトではどうなる?

a. 送り先から削除される

b. 送り先から削除されない

38

Copyright© 2012, Oracle. All rights reserved.

• 再配信制限

• JMSコンシューマが正常に処理できないメッセージは送り先に不正に滞留し続ける (ポイズン・メッセージ)

• メッセージの存続時間が0(無制限)だとメッセージは消えない

• 送り先毎に再配信の上限を設定可能 (デフォルトでは再配信回数に制限はない)

• 上限に達したメッセージの処理を選択可能

• 破棄(ログなし)

• ログ(その後に破棄)

• リダイレクト(エラー送り先)

送り先

JMSで設定しておきたいこと③

39

アプリケーション B

JMSクライアント (メッセージ・コンシューマ)

JMSサーバ

JMSメッセージ

例外

エラーになった メッセージは 送り先に滞留

Copyright© 2012, Oracle. All rights reserved.

再配信制限 – 送り先

40

再配信回数の上限: -1は制限なし

再配信までの遅延時間(ミリ秒)

再配信を超えた場合の処理ポリシー:

ログを選択する場合は[ロギング]でJMSロギングを有効化しておく

有効期限ポリシーがリダイレクトの場合の送り先を指定

Copyright© 2012, Oracle. All rights reserved.

メッセージの存続時間

41

• JMSメッセージプロパティでメッセージの存続時間(JMSTimeToLive)を指定可能

• 接続ファクトリ(デフォルト配信) / プロデューサで指定可能

• 送り先でオーバライド可能

Copyright© 2012, Oracle. All rights reserved.

こんなこともできます – 他のメッセージング・サービスとの連携

• SAF (Store And Forward) • 2つのJMSサーバ間でメッセージ転送を行う機能

• メッセージ転送の信頼性はSAFサービスが保証

• Messaging Bridge • JMSサーバとJCAアダプタで接続したメッセージング・サービスとの間でメッセージ転送を行う機能

• JMS非対応のメッセージング・サービスとの連携

• WebLogic Server 8.1以下のJMSサーバとの連携

• 外部JMSサーバ

• 外部のJMS対応メッセージング・サービス(Oracle AQなど)を参照するための設定

42

Copyright© 2012, Oracle. All rights reserved.

こんなこともできます - メッセージングの拡張機能

• 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終端指定

43

Copyright© 2012, Oracle. All rights reserved.

まとめ

• 設定しておきたいJMSリソースの設定

• 永続メッセージング

• 永続ストア(ファイル/JDBC)は信頼性を第一に検討

• 割当

• JMSメッセージがヒープを専有し過ぎないための設定

• JMSサーバ、送り先毎に設定可能

• 再配信制限

• ポイズンメッセージを回避するための設定

• 要件に応じて有効期限ポリシーを選択

• メッセージの存続時間もあわせて検討

44

Copyright© 2012, Oracle. All rights reserved.

今回のまとめ

• WebLogic Serverはエンタープライズクラスのメッセージング環境を提供します

• JMS標準仕様に則ったメッセージング

• PTPドメイン, Pub/Subドメイン

• 既存のJMS対応メッセージング・システムとの連携

• UOOやUOWによる最適化

• WebLogic JMS設定はアプリケーション側(API)とインフラ側(

設定)で設定できるものがあります

• 設定に関する責任範囲を明確にしておきましょう

45

Copyright© 2012, Oracle. All rights reserved.

Oracle Universityからのお知らせ

• JMSの設定をはじめとしたWebLogic Serverの管理方法を学習したい方に最適な研修コースをご提供しています。 • Classroomトレーニングだけでなく、Live Virtual Class、『Oracle トレーニング・オンデマンド』など多様な受講形態から選択いただけます。

46

Copyright© 2012, Oracle. All rights reserved.

コース内容

■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日間 日程の詳細は Oracle University Webサイト にてご確認ください。

受講料 定価¥363,825(税込) ※Oracle PartnerNetwork会員様は、パートナー割引価格で受講いただけます。

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 WebLogic Server 11g: 管理

ミドルウェア

次回開催日程 ■7/9(月) - 7 /13(金) トレーニングキャンパス青山

■8/27(月) - 8/31(金) 三田(芝浦)会場

Copyright© 2012, Oracle. All rights reserved.

WebLogic Server勉強会 参加者の皆さまの特典

http://education.oracle.co.jp/campaign_wlstudy/

48

Copyright© 2012, Oracle. All rights reserved.

Copyright© 2012, Oracle. All rights reserved. 50