ホームページ  >  記事  >  Java  >  疎結合メッセージを使用した非同期通信プロセスとは何ですか?

疎結合メッセージを使用した非同期通信プロセスとは何ですか?

零下一度
零下一度オリジナル
2017-06-28 09:38:001398ブラウズ

メッセージとは

疎結合された非同期通信プロセス

1. メッセージ指向ミドルウェア (MOM): メッセージの送信者はプロデューサーと呼ばれ、メッセージが保存される場所は宛先と呼ばれます。メッセージを受信するコンポーネント コンシューマ

2. メッセージ モデル:
a. ポイントツーポイント: 宛先はキューになり、メッセージは 1 回だけ消費されます
b. パブリッシュ/サブスクライブ: 宛先がサブジェクトになり、コンシューマーはサブスクライバーと呼ばれ、メッセージは任意の数でコンシュームできます

Java メッセージ サービス

1. JMS API: Java

を使用して MOM (メッセージ ミドルウェア) にアクセスするための統一された標準的な方法を提供します。 2. メッセージプロデューサープロセスを開発します:
a. 依存関係注入を使用して、接続ファクトリー ConnectionFactory と宛先 Destination オブジェクトを取得します
b. 接続ファクトリーの createConnection を使用して接続を開きます
c. Connection の createSession を使用してセッションを作成し、トランザクション パラメーターを指定します
d. セッションの createProducer を使用して貨物キュープロデューサーを作成します
e. セッションの createMessage を使用してメッセージ Message を作成し、
を設定します f. 貨物キュープロデューサーの送信を使用してメッセージを送信します
g. リソースを解放する
注: 上記のプロセスは JavaEE 6 に基づいています。JavaEE 7 では、よりシンプルな開発プロセス

が提供されます。 3. メッセージ インターフェイス: メッセージ ヘッダー、メッセージ属性、メッセージ本文、実装クラス: ObjectMessage はオブジェクトを転送、ByteMessage はバイトを転送、MapMessage は Map を転送、StreamMessage はストリーム データを転送、TextMessage はテキストを転送します

メッセージ駆動型 Bean (MDB)

1. 利点: マルチスレッド、簡素化されたメッセージ コード

2. 設計原則:
a. MDB クラスはメッセージ リスナー インターフェイスを直接または間接的に実装する必要があります
b. 具体的かつパブリックである必要があります。最終クラスや抽象クラスにすることはできません
c. POJO である必要があり、別の MDB のサブクラスであってはなりません
d. パラメーターのないコンストラクターが必要です
e. 最終的な方法はあり得ません
f. スローされると MDB インスタンスが終了するため、ランタイム例外はスローされません

3. MDB を使用して消費者プロセスを開発する
a. アノテーション @MessageDriven を使用してクラスを MDB としてマークし、MDB 構成を指定します
b. MessageListener インターフェースを実装し、onMessage メソッドを実装します
c. onMessage にロジックを実装する

4. @MessageDriven: アノテーション付きクラスは MDB です。このアノテーションには、MDB によって実装されるメッセージ インターフェイスを指定する 3 つのパラメーターがあります (インターフェイスはクラスに直接実装できます)。独自の構成プロパティを指定します

5. MessageLisener: MDB をメッセージ コンシューマーとして登録し、さまざまなシナリオに従ってさまざまなリスナー インターフェイスを実装します

6. ActivationConfigProperty: メッセージング システムの構成情報を設定します
a. destinationType: MDB がキューまたはトピックをリッスンしているかどうかをコンテナーに通知します
b. connectionFactoryJndiName: MDB の JMS 接続を作成するために使用される接続ファクトリー JDNI を指定します
c. destianName: リスニング先を指定します
d.acknowledgeMode: JMS セッション確認モードを指定します
e. subscriptionDurability: 永続的なサブスクライバーとして設定するために使用されます
f. messageSelector: メッセージをフィルターします

7. MDB ライフサイクル:
a. MDB インスタンスを作成して設定します
b. リソースを注入します
c. 管理されたプールに保存します
d. メッセージの到着先を検出したら、アイドル状態の Bean をプールから取り出します
e. メッセージリスナーメソッド、つまり onMessage メソッドを実行します
f. onMessage メソッドが実行されたら、アイドル状態の Bean をプールに保存します
g. 必要に応じて Bean をプールから取り消し/破棄します

8. MDB からメッセージを送信: JNDI からキューに挿入し、ファクトリ オブジェクトに接続し、Java メッセージと同じように動作します

9. トランザクションの管理: 通常の状況では、トランザクションは onMessage メソッドの前に開始され、トランザクションはメッセージ コンテキスト オブジェクトを通じてロールバックできます

。 MDB のベストプラクティス

1. 用途に応じてMDBを使用するかどうかを選択します

2. メッセージ モデルを選択します: PTP またはパブリッシュ/サブスクライブはプログラム設計時に決定する必要がありますが、幸いなことに、この 2 つの間の切り替えには構成の変更のみが必要です

3. モジュール化を維持する: MDB の onMessage メソッドはビジネス ロジックを処理すべきではありません。ビジネス ロジックは対応するセッション Bean に配置され、MDB が対応するセッション Bean を呼び出す役割を果たします。 4.シーンに合わせてフィルターを駆使したり目的地を分けたり

5. メッセージタイプの選択: 利用シナリオに応じて、送信に使用するメッセージタイプを選択します

6. 有害なメッセージに注意してください: 消費できずにロールバックされるメッセージは、受信/ロールバックの無限ループに陥りますが、各メーカーが独自のデッド メッセージの実装を行っていますが、プログラミングする際には注意する必要があります

。 7. MDB プール サイズの構成: シナリオとニーズに従って構成します

参考

EJB 3 の動作、第 2 版

以上が疎結合メッセージを使用した非同期通信プロセスとは何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。