回答:
2つの分散プロセス間で確実に通信するために使用されます。
はい、あなたはでメッセージを格納することができ、データベースすぐにメッセージが受信されると、あなたがする必要があるだろうとして、2つのプロセス間で通信することではなく、DELETE
メッセージ、行を意味INSERT
し、DELETE
各メッセージについて。1秒間に数千のメッセージを通信
するようにスケールアップしようとすると、データベースはフォールオーバーする傾向があります。
一方、メッセージ指向のミドルウェア[MOM] ActiveMQ
は、これらのユースケースを処理するために構築されています。
彼らは、正常なシステムのメッセージはすぐに削除され、オーバーヘッドを回避するために最適化できると想定しています。
また、コンシューマがSQLクエリを実行して新しいメッセージをポーリングする代わりに、コンシューマにメッセージをプッシュすることもできます。
これにより、システムに送信される新しいメッセージの処理に伴う待ち時間がさらに短縮されます。
ActiveMQ
、または一般にすべてのメッセージ指向ミドルウェア(MOM)実装は、2つのアプリケーションまたは2つのコンポーネント間でメッセージを送信する目的で設計されています 1つのアプリケーション内のます。
基本的に、MOMとデータベースは、読み取りと書き込みが可能なトランザクション型の永続的なデータストレージを提供するという点で、共通の基盤を共有しています。
大きな違いは使用パターンです。データベースは非常に汎用的で、複数のテーブルに対する複雑な検索用に最適化されていますが、MOMはメッセージを一度に1つずつFIFOのように読み取るように最適化されています[Queue]。
JMS
は、ActiveMQが実装するAPIであり、Javaエンタープライズアプリケーションの重要な基盤です。これにより、メッセージはかなり一般的な形式と意味論を共有し、異なるアプリケーション間の統合が容易になります。
もちろん、ActiveMQの中だけですより詳細な機能の多くは、のようなワイヤー・プロトコルがあるOpenWire
、STOMP
とMQTT
、JMS
、EIP
JMSブリッジは「(クラスタリング、一緒にApacheのキャメルと、「要求/応答」のようなメッセージパターンは、および「パブリッシュ/サブスクライブ」ブローカーのネットワーク」)。スケーリングや配布など
が可能です。これらのトピックはかなり大きいため、興味がある場合は少し読んでください。
ActiveMQ
は優れたスケジューラサポートを備えています。つまり、メッセージの送信を特定の時間に配信するようにスケジュールできます。
この機能を使用して、医療シナリオで薬物の詳細をアップロードする患者に薬物リマインダーを送信しました。
Scheduled Jobs
同じ目的でOracleデータベースを使用しました。
RDBMSでは、データの行を処理するときに、通常、行が処理されたことを示すフラグを更新して、処理が繰り返されないようにします。
ただし、Message Queueでは、メッセージを確認するだけで、次のコンシューマが次のメッセージを処理します。
違いはUPDATE
、RDBMSのacknowledge
ステートメントは、activmeqのステートメントと比較して非常に遅い操作であることです。
私は以下を強調したいと思います:
分離:システムは接続されていなくても通信できます。キューはシステム間にあり、通信はキューを通じて行われるため、1つのシステム障害が他のシステムに影響することはありません。システムは稼働中も機能し続けます。
回復サポート:キュー内のメッセージ自体が持続しました。キューが失敗した場合、メッセージは後で復元できます。
信頼性の高い通信:クライアントの要求を処理するシステムを検討してください。通常の場合、システムは1分あたり100件のリクエストを受信します。リクエスト数が平均を超えると、このシステムは信頼できなくなります。このような場合、Queueはリクエストを管理でき、システムのスループットに基づいて、メッセージを壊すことなく定期的にプッシュできます。
非同期:クライアントサーバーの通信は非ブロッキングです。クライアントがサーバーにリクエストを送信すると、応答を待たずに他の操作を実行できます。受信したクライアントはいつでもそれを処理できます。
ウィキペディアから
Apache ActiveMQは、完全なJava Message Service(JMS)クライアントとともにJavaで記述されたオープンソースのメッセージブローカーです。「エンタープライズ機能」を提供します。これは、この場合、複数のクライアントまたはサーバーからの通信を促進することを意味します
あなたの質問について:
なぜデータベースを使用しないのですか?
一時データではなく永続データにデータベースを使用する必要があります。SenderからReceiverにメッセージを送信する必要があるとします。メッセージを受信すると、Receiverは1つの操作(receive、processおよびforget)を実行します。そのメッセージを処理した後は、そのメッセージはまったく必要ありません。この場合、永続的なデータベースにメッセージを保存することは適切なソリューションではありません。
メッセージングシステムの代わりにデータベースを使用する場合、データベースへのメッセージの挿入と削除に関する@Hiram Chirinoの回答に完全に同意します。
ActiveMQにはデータベースにはない機能があるはずです。
沢山あります。詳細については、ドキュメントページをご覧ください。見ていユースケースをあまりにも。
ActiveMQの内部を理解するには、このプレゼンテーションをご覧ください。