web-dev-qa-db-ja.com

JMS /メッセージキューの実際の使用?

JMSとApache ActiveMQについて少し読んでいた。そして、ここで人々がJMSまたは類似のメッセージキュー技術を使用しているのはどのような現実の使用であるのか疑問に思っていましたか?

174
nos

JMS(ActiveMQはJMSブローカーの実装です)は、非同期要求処理を可能にするメカニズムとして使用できます。リクエストの完了に時間がかかるため、または実際のリクエストに複数の関係者が興味を持っている可能性があるため、これを行うことができます。これを使用するもう1つの理由は、複数のクライアント(異なる言語で作成される可能性がある)がJMSを介して情報にアクセスできるようにするためです。 ActiveMQは、STOMPプロトコルを使用してC#/ Java/Rubyクライアントからのアクセスを許可できるため、良い例です。

実際の例は、特定の顧客に注文を出すために使用されるWebアプリケーションの例です。その注文の一部として(およびデータベースに保存する)、いくつかの追加タスクを実行することができます。

  • 何らかのサードパーティのバックエンドシステム(SAPなど)に注文を保存する
  • お客様に注文が送信されたことを知らせるメールを送信します

これを行うには、アプリケーションコードは、注文IDを含むJMSキューにメッセージを発行します。キューをリッスンしているアプリケーションの一部は、orderIdを取得し、データベースで注文を検索し、別のサードパーティシステムで注文することでイベントに応答する場合があります。アプリケーションの別の部分は、orderIdを取得し、顧客に確認メールを送信する責任を負います。

181
Jon

これらを常に使用して、長時間実行される操作を非同期に処理します。 Webユーザーは、リクエストの処理を5秒以上待つことを望みません。それよりも長いものを実行している場合、設計の1つは、要求をキューに送信し、ユーザーがジョブの終了を確認できるURLをすぐに送り返すことです。

パブリッシュ/サブスクライブは、送信者を多くの受信者から切り離すためのもう1つの優れた手法です。加入者は必要に応じて出入りできるため、柔軟なアーキテクチャです。

90
duffymo

JMSには驚くほど多くの用途があります。

  • カスタマーサービスのためのWebチャット通信。

  • バックエンドのデバッグロギング。すべてのアプリサーバーは、さまざまなレベルでデバッグメッセージをブロードキャストしました。次に、JMSクライアントを起動して、デバッグメッセージを監視できます。 syslog のようなものを使用できたのは確かですが、これによりコンテキスト情報(アプリサーバー名、API呼び出し、ログレベル、ユーザーID、メッセージタイプによるeqなど...)。出力も色付けしました。

  • ファイルへのデバッグロギング。上記と同じように、フィルターを使用して特定の部分のみを引き出し、一般的なログ記録のためにファイルに記録しました。

  • アラート。繰り返しますが、上記のロギングと同様のセットアップ、特定のエラーの監視、およびさまざまな手段(電子メール、テキストメッセージ、IM、Growlポップアップ...)による人々への警告

  • ソフトウェアクラスターの動的な構成と制御。各アプリサーバーは「configure me」メッセージをブロードキャストし、その後、あらゆる種類の構成情報を含むメッセージで応答する構成デーモンをブロードキャストします。後で、すべてのアプリサーバーの構成を一度に変更する必要がある場合は、構成デーモンから実行できます。

  • そして通常-請求、注文処理、プロビジョニング、電子メール生成などの遅延アクティビティのためにキューに入れられたトランザクション...

非同期でメッセージの配信を保証したい場所ならどこでも最適です。

73
mikesomeone

分散(a)同期コンピューティング。
実際の例としては、アプリケーション全体の通知フレームワークがあります。これは、アプリケーションの使用中のさまざまな時点で利害関係者にメールを送信します。そのため、アプリケーションは、Producerオブジェクトを作成し、それを特定のMessageに配置して先に進むことで、Queueとして機能します。
問題のConsumerにサブスクライブするQueuesのセットがあり、送信されるMessageの処理に注意します。このトランザクションの過程で、Producersは、特定のMessageの処理方法のロジックから切り離されることに注意してください。
メッセージングフレームワーク(ActiveMQなど)は、Messagesを提供することにより、このようなMessageBrokerトランザクションを容易にするバックボーンとして機能します。

19
pugmarx

異なるファンド管理システム間で日中取引を送信するために使用しました。優れたテクノロジメッセージングとは何かを知りたい場合は、「 Enterprise Integration Patterns 」という本を徹底的にお勧めします。要求/応答やパブリッシュ/サブスクライブなどのJMSの例がいくつかあります。

メッセージングは​​、統合のための優れたツールです。

10
RichardOD

これを使用して、既存のトランザクションを中断または競合させたくない非同期処理を開始します。

たとえば、「購入するもの」のような高価で非常に重要なロジックを持っているとしましょう。購入するものの重要な部分は「通知ストア」です。通知呼び出しを非同期にし、通知呼び出しに関係するロジック/処理が購入ビジネスロジックでリソースをブロックまたは競合しないようにします。最終結果、購入が完了し、ユーザーは満足しています。お金を受け取ります。キューは配信が保証されているため、ストアは、開封後またはキューに新しいアイテムが追加されるとすぐに通知されます。

8
Kevin Williams

Amazonに似たオンライン小売Webサイトであるアカデミックプロジェクトに使用しました。 JMSは、次の機能の処理に使用されました。

  1. 出荷がある場所から別の場所に移動するときに、顧客が行った注文の位置を更新します。これは、JMSキューにメッセージを継続的に送信することにより行われました。
  2. 出荷が遅れるなどの異常なイベントについて警告し、顧客にメールを送信します。
  3. 配信がその宛先に到達した場合、配信イベントを送信します。

メインサーバーに接続されたリモートクライアントも複数実装されていました。接続が利用可能な場合は、メインデータベースへのアクセスに使用し、使用しない場合は独自のデータベースを使用します。データの一貫性を処理するために、2PCメカニズムを実装しました。このため、これらのシステム間でメッセージを交換するためにJMSを使用しました。つまり、キューにメッセージを送信してプロセスを開始するコーディネーターとして機能し、他のユーザーはキューにメッセージを再度返信して応答します。他の人がすでに述べたように、これはpub/subモデルに似ていました。

8
qwerty

JMSはさまざまな商業プロジェクトや学術プロジェクトで使用されています。 JMSは、完全に分離された分散システムが必要なときはいつでも簡単に把握できます。一般的に、1つのノードからリクエストを送信する必要があり、ネットワーク内の誰かが送信者に受信者に関する情報を提供するかどうかにかかわらず、それを処理します。

私の場合、論文でメッセージ指向ミドルウェア(MOM)を開発する際にJMSを使用しました。特定のタイプのオブジェクト指向オブジェクトは、リクエストとして一方で生成され、応答として他方でコンパイルおよび実行されます。 。

6
paradisonoir

Apache Camel ActiveMQと組み合わせて使用​​すると、エンタープライズ統合パターンを実行するのに最適な方法です

5
Rob Davies

メッセージングを使用してオンライン見積もりを生成しました

4
bluegene

信頼性の低いネットワーク上の膨大な数のリモートサイトのシステムとの通信にJMSを使用しています。疎結合と信頼性の高いメッセージングの組み合わせにより、安定したシステムランドスケープが生成されます。各メッセージは技術的に可能な限りすぐに送信され、ネットワークの大きな問題はシステムランドスケープ全体に影響を与えません。

3
roundrobin