STOMP (Simple (または Streaming) Text Orientated Messaging Protocol) は、異なるアプリケーション間の非同期メッセージング用のシンプルなテキストベースのメッセージング プロトコルです。HTTP のような要求応答モデルを使用し、パブリッシュ/サブスクライブとポイントツーポイント メッセージングの両方をサポートします。
STOMP プロトコルには、次の主要な概念があります。
- クライアント: STOMP メッセージを送受信するアプリケーション。
- サーバー: STOMP プロトコルをサポートするメッセージ プロキシ サーバー。
- 送信先: メッセージの送信先。キューまたはトピックにすることができます。
- サブスクリプション: クライアントはターゲットにサブスクライブして、そのターゲットでメッセージを受信します。
- パブリッシュ: クライアントはメッセージをターゲットにパブリッシュします。
- フレーム (Frame): コマンド、いくつかのヘッダー情報、およびメッセージ本文を含む STOMP メッセージの基本単位。
STOMP プロトコルのフレーム構造は次のとおりです。
COMMAND
header1:value1
header2:value2
body<null>
このうち、COMMAND は CONNECT、SUBSCRIBE、SEND などの STOMP コマンドを表し、header はオプションである STOMP フレームのヘッダー情報を表し、body はオプションである STOMP フレームのメッセージ本文を表します。
一般的に使用される STOMP コマンドは次のとおりです。
- CONNECT: サーバーとの接続を確立します。
- SEND: 指定されたターゲットにメッセージを送信します。
- SUBSCRIBE: 指定されたターゲットにサブスクライブし、そのターゲットからメッセージを受信します。
- UNSUBSCRIBE: 指定されたターゲットのサブスクライブを解除し、ターゲットからのメッセージの受信を停止します。
- BEGIN、COMMIT、ABORT: トランザクション管理用。
STOMP プロトコルは、メッセージ ID、メッセージ タイプなどの一部のメタデータ情報の転送に使用できるメッセージ ヘッダーもサポートしています。一般的に使用されるメッセージ ヘッダーは次のとおりです。
- 宛先: メッセージの宛先アドレス。
- content-type: メッセージ本文のタイプ。
- content-length: メッセージ本文の長さ。
- 受信: クライアントが要求した確認フレームの ID。
- message-id: メッセージを一意に識別するために使用されます。
- subscription: このメッセージを購読するための購読 ID。
STOMP プロトコルは、テキスト、バイナリ、JSON など、複数のエンコーディングをサポートしています。同時に、接続の有効性を維持するためのハートビート メカニズムもサポートします。
STOMP プロトコルは、次のようなさまざまな非同期メッセージング シナリオに適用できます。
1. メッセージ キューイング: STOMP プロトコルを使用して、複数のコンシューマーが同じターゲットにサブスクライブすることをサポートする高性能でスケーラブルなメッセージ キューイング システムを構築できます。一般的な STOMP メッセージ ブローカー サーバーには、Apache ActiveMQ と RabbitMQ が含まれます。
2. リアルタイム通信: STOMP プロトコルは、チャット ルーム、コラボレーション ツールなどのリアルタイム通信システムを構築するために使用でき、ブロードキャスト メッセージとポイント ツー ポイント メッセージをサポートします。
3. イベント駆動型アーキテクチャ: STOMP プロトコルを使用してイベント駆動型アーキテクチャを構築でき、システム内のさまざまなイベントが STOMP メッセージを介して送信および処理されます。
4. IoT インターネット アプリケーション: STOMP プロトコルを使用して IoT アプリケーションを構築できます。デバイスによって生成されたデータは、STOMP メッセージを介した分析と処理のためにバックエンド処理システムに送信されます。
つまり、STOMP プロトコルは、パブリッシュ/サブスクライブおよびポイント ツー ポイント メッセージングをサポートする単純な非同期メッセージ プロトコルであり、さまざまなビジネス ニーズを満たすさまざまなコマンドとメッセージ ヘッダーを提供します。メッセージングのシナリオには、幅広いアプリケーションの見通しがあります。