ActiveMQの用途-データベースを使用してメッセージングの概念を適用できますか?


回答:


178

2つの分散プロセス間で確実に通信するために使用されます。

はい、あなたはでメッセージを格納することができ、データベースすぐにメッセージが受信されると、あなたがする必要があるだろうとして、2つのプロセス間で通信することではなく、DELETEメッセージ、行を意味INSERTし、DELETE各メッセージについて。1秒間に数千のメッセージを通信
するようにスケールアップしようとすると、データベースはフォールオーバーする傾向があります。

一方、メッセージ指向のミドルウェア[MOM] ActiveMQは、これらのユースケースを処理するために構築されています。
彼らは、正常なシステムのメッセージはすぐ削除され、オーバーヘッドを回避するために最適化できると想定しています。

また、コンシューマがSQLクエリを実行して新しいメッセージをポーリングする代わりに、コンシューマにメッセージをプッシュすることもできます。
これにより、システムに送信される新しいメッセージの処理に伴う待ち時間がさらに短縮されます。


いい説明だ!2つの分散プロセスは同じプロセスである必要がありますか?同じアプリケーションの2つのインスタンスを意味しますか?
マーベリック

いいえ、任意のアプリケーションはActiveMQを介して相互に通信できます。たとえば、アプリケーションAとBはキューABとBA(読み取り:BからのAへのメッセージとその逆)を作成し、一致するキューに互いのメッセージを送信できます。
Alex

あなたは見てくださいstackoverflow.com/questions/48579060/…
gstackoverflow

67

ActiveMQ、または一般にすべてのメッセージ指向ミドルウェア(MOM)実装は、2つのアプリケーションまたは2つのコンポーネント間でメッセージ送信する目的で設計されています 1つのアプリケーション内のます。

基本的に、MOMとデータベースは、読み取りと書き込みが可能なトランザクション型の永続的なデータストレージを提供するという点で、共通の基盤を共有しています。
大きな違いは使用パターンです。データベースは非常に汎用的で、複数のテーブルに対する複雑な検索用に最適化されていますが、MOMはメッセージを一度に1つずつFIFOのように読み取るように最適化されています[Queue]。

JMSは、ActiveMQが実装するAPIであり、Javaエンタープライズアプリケーションの重要な基盤です。これにより、メッセージはかなり一般的な形式と意味論を共有し、異なるアプリケーション間の統合が容易になります。

もちろん、ActiveMQの中だけですより詳細な機能の多くは、のようなワイヤー・プロトコルがあるOpenWireSTOMPMQTTJMSEIPJMSブリッジは「(クラスタリング、一緒にApacheのキャメルと、「要求/応答」のようなメッセージパターンは、および「パブリッシュ/サブスクライブ」ブローカーのネットワーク」)。スケーリングや配布など
が可能です。これらのトピックはかなり大きいため、興味がある場合は少し読んでください。


25

ActiveMQは優れたスケジューラサポートを備えています。つまり、メッセージの送信を特定の時間に配信するようにスケジュールできます

この機能を使用して、医療シナリオで薬物の詳細をアップロードする患者に薬物リマインダーを送信しました。


3
それはいいね。同様の注意喚起の目的で、Quartzスケジューリングライブラリを使用しました。
Siddhartha、2015年

Scheduled Jobs同じ目的でOracleデータベースを使用しました。
ahmednabil88

15

RDBMSでは、データの行を処理するときに、通常、行が処理されたことを示すフラグを更新して、処理が繰り返されないようにします。

ただし、Message Queueでは、メッセージを確認するだけで、次のコンシューマが次のメッセージを処理します。

違いはUPDATE、RDBMSのacknowledgeステートメントは、activmeqのステートメントと比較して非常に遅い操作であることです。


8

私は以下を強調したいと思います:

分離:システムは接続されていなくても通信できます。キューはシステム間にあり、通信はキューを通じて行われるため、1つのシステム障害が他のシステムに影響することはありません。システムは稼働中も機能し続けます。

回復サポート:キュー内のメッセージ自体が持続しました。キューが失敗した場合、メッセージは後で復元できます。

信頼性の高い通信:クライアントの要求を処理するシステムを検討してください。通常の場合、システムは1分あたり100件のリクエストを受信します。リクエスト数が平均を超えると、このシステムは信頼できなくなります。このような場合、Queueはリクエストを管理でき、システムのスループットに基づいて、メッセージを壊すことなく定期的にプッシュできます。

非同期:クライアントサーバーの通信は非ブロッキングです。クライアントがサーバーにリクエストを送信すると、応答を待たずに他の操作を実行できます。受信したクライアントはいつでもそれを処理できます。


7

ウィキペディアから

Apache ActiveMQは、完全なJava Message Service(JMS)クライアントとともにJavaで記述されたオープンソースのメッセージブローカーです。「エンタープライズ機能」を提供します。これは、この場合、複数のクライアントまたはサーバーからの通信を促進することを意味します

あなたの質問について:

なぜデータベースを使用しないのですか?

一時データではなく永続データにデータベースを使用する必要があります。SenderからReceiverにメッセージを送信する必要があるとします。メッセージを受信すると、Receiverは1つの操作(receive、processおよびforget)を実行します。そのメッセージを処理した後は、そのメッセージはまったく必要ありません。この場合、永続的なデータベースにメッセージを保存することは適切なソリューションではありません。

メッセージングシステムの代わりにデータベースを使用する場合、データベースへのメッセージの挿入と削除に関する@Hiram Chirinoの回答に完全に同意します。

この記事とこの記事の利点

  1. エンタープライズ統合:異なる言語と異なるオペレーティングシステムで構築されたアプリケーションが相互に統合できるようにします
  2. 場所の透過性:クライアントアプリケーションは、サービスアプリケーションがどこにあるかを知る必要はありません。
  3. 信頼できるコミュニケーション –メッセージのプロデューサー/コンシューマーが同時に利用可能である必要はありません
  4. スケーリング –サービスを追加して水平方向にスケーリングできます
  5. 非同期通信 –クライアントは、サービスが応答を送信するまでブロックする代わりに、メッセージを発行して他の処理を続行できます。
  6. カップリングの削減 –以前の5つの利点の結果として、クライアントとサービスによって行われる仮定が大幅に削減されます。サービスは、クライアントに影響を与えたり中断したりすることなく、場所、プロトコル、可用性など、サービス自体の詳細を変更できます。

ActiveMQにはデータベースにはない機能があるはずです。

沢山あります。詳細については、ドキュメントページをご覧ください。見ていユースケースをあまりにも。

ActiveMQの内部を理解するには、このプレゼンテーションをご覧ください。


2

複数の場所で同時に使用されているアプリケーションがあるとします。また、アプリケーションが1分あたり1000リクエストなどを処理する必要があると仮定すると、通常のdb操作はそのような操作を処理できません。Activemqは、すべてのメッセージをキューに入れるメッセージ処理として機能するため、アプリケーションの1つが1つの場所でクラッシュした場合でも他の場所は影響を受けません。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.