STOMP ゲートウェイ
EMQX STOMP ゲートウェイは、STOMP と MQTT プロトコル間のメッセージングプロトコル変換を行うブリッジであり、これらのプロトコルを使用するクライアント同士の通信を可能にします。
この STOMP ゲートウェイは、クライアントとサーバーに対して軽量かつシンプルなメッセージングソリューションを提供し、多様なメッセージング環境でのメッセージ交換を実現します。TCP および SSL タイプのリスナーをサポートしており、柔軟で多用途なメッセージングシステム構築ツールです。
TIP
STOMP ゲートウェイは Stomp v1.2 をベースとしており、STOMP v1.0 および v1.1 の仕様とも互換性があります。
STOMP ゲートウェイの有効化
EMQX 5 では、STOMP ゲートウェイはダッシュボード、REST API、設定ファイル base.hocon を通じて設定および有効化が可能です。本節ではダッシュボードによる設定手順を例に操作方法を説明します。
EMQX ダッシュボードの左側ナビゲーションメニューで 管理 -> ゲートウェイ をクリックします。ゲートウェイ ページにはサポートされているすべてのゲートウェイが一覧表示されます。STOMP を見つけ、操作 列の 設定 をクリックすると、STOMP 初期化 ページに遷移します。
TIP
EMQX をクラスターで運用している場合、ダッシュボードや REST API で行った設定はクラスター全体に影響します。特定のノードのみ設定を変更したい場合は、base.hocon にて設定してください。
設定を簡略化するため、EMQX は ゲートウェイ ページ上のすべての必須項目にデフォルト値を用意しています。大幅なカスタマイズが不要な場合、STOMP ゲートウェイは以下の3クリックで有効化できます。
- 基本設定 タブで 次へ をクリックし、すべてのデフォルト設定を受け入れます。
- 続いて リスナー タブに遷移し、EMQX はポート
61613の UDP リスナーを事前設定しています。ここで再度 次へ をクリックして設定を確定します。 - 最後に 有効化 ボタンをクリックして STOMP ゲートウェイを起動します。
ゲートウェイの有効化が完了すると、ゲートウェイ ページに戻り、STOMP ゲートウェイが 有効 状態で表示されていることを確認できます。

EMQX 5.0 では、STOMP ゲートウェイはダッシュボードから設定および有効化が可能です。
上記の設定は REST API でも行えます。
例:
curl -X 'PUT' 'http://127.0.0.1:18083/api/v5/gateways/stomp' \
-u <your-application-key>:<your-security-key> \
-H 'Content-Type: application/json' \
-d '{
"name": "stomp",
"enable": true,
"mountpoint": "stomp/",
"listeners": [
{
"type": "tcp",
"name": "default",
"bind": "61613",
"max_conn_rate": 1000,
"max_connections": 1024000
}
]
}'STOMP クライアントとの連携
クライアントライブラリ
STOMP ゲートウェイを構築した後は、STOMP クライアントツールを使って接続テストを行い、正常に動作することを確認できます。例えば stomp.py などがあります。
パブリッシュ/サブスクライブ
STOMP プロトコルは PUB/SUB メッセージングモデルと完全に互換性があり、STOMP ゲートウェイは以下のように動作します。
- STOMP プロトコルの
SENDメッセージをメッセージのパブリッシュに使用します。SENDメッセージのdestinationフィールドがトピックを指定し、メッセージ内容はSENDメッセージのボディに含まれます。QoS(サービス品質)は固定で 0 です。 - STOMP プロトコルの
SUBSCRIBEメッセージをサブスクライブ要求に使用します。SUBSCRIBEメッセージのdestinationフィールドがトピックを指定します。QoS は固定で 0 であり、MQTT プロトコルで定義されているワイルドカードもサポートします。 - STOMP プロトコルの
UNSUBSCRIBEメッセージをサブスクライブ解除要求に使用します。UNSUBSCRIBEメッセージのdestinationフィールドがトピックを指定します。
STOMP ゲートウェイのカスタマイズ
デフォルト設定に加え、EMQX はさまざまな設定オプションを提供しており、特定のビジネス要件に合わせて柔軟に調整可能です。本節では ゲートウェイ ページで利用できる各種設定項目について詳しく解説します。
基本設定
基本設定 タブでは、許容する最大ヘッダー数、ヘッダー長の最大値、統計収集の有効化設定、ゲートウェイの MountPoint 文字列の設定が可能です。以下に各項目の詳細を示します。
Max Header: 許容する最大の STOMP ヘッダー数を設定します。デフォルトは
10です。Max Each Header Length: ヘッダー値の最大文字列長を設定します。デフォルトは
1024です。Max Body Length: STOMP パケットの最大バイト数を設定します。デフォルトは
65536です。Idle Timeout: 非アクティブ状態が続いた場合に接続を切断するまでの最大待機時間(秒)を設定します。
Enable Statistics: ゲートウェイの統計収集とレポートを許可するかを設定します。デフォルトは
true、選択肢はtrueまたはfalseです。MountPoint: パブリッシュやサブスクライブ時にすべてのトピックの先頭に付加される文字列を設定します。これにより異なるプロトコル間でのメッセージルーティングの分離を実現できます。例:
stomp/注意: このトピックプレフィックスはゲートウェイ側で管理されるため、クライアントはパブリッシュやサブスクライブ時に明示的にこのプレフィックスを付加する必要はありません。
リスナーの追加
ポート 61613 で名前が default の tcp リスナーが既に設定されており、最大16個のアセプターをプールし、最大1,024,000の同時接続をサポートします。より詳細な設定を行う場合は 設定 をクリックし、リスナーを削除する場合は 削除 をクリック、新規リスナーを追加する場合は + リスナー追加 をクリックしてください。
TIP
STOMP ゲートウェイは TCP および SSL タイプのリスナーのみをサポートしています。
リスナー追加 をクリックすると リスナー追加 ページが開き、以下の設定項目を入力できます。
基本設定
- 名前: リスナーの一意識別子を設定します。
- タイプ: プロトコルタイプを選択します。STOMP では tcp または ssl が選択可能です。
- バインド: リスナーが接続を受け付けるポート番号を設定します。
- MountPoint(任意): パブリッシュやサブスクライブ時にすべてのトピックの先頭に付加される文字列を設定し、異なるプロトコル間でのメッセージルーティング分離を実現します。
リスナー設定
- アセプター: アセプタープールのサイズを設定します。デフォルトは 16。
- 最大接続数: リスナーが処理可能な同時接続数の最大値を設定します。デフォルトは 1024000。
- 最大接続レート: リスナーが1秒あたりに受け入れる新規接続の最大レートを設定します。デフォルトは 1000。
- プロキシプロトコル: EMQX が ロードバランサー の背後に配置されている場合に、プロトコル V1/V2 を有効化します。
- プロキシプロトコルタイムアウト: 非アクティブ状態でプロキシプロトコルパッケージを待機する最大時間(秒)を設定し、タイムアウト時に接続を切断します。デフォルトは 3秒。
TCP 設定
- ActiveN: ソケットの
{active, N}オプションを設定します。これはソケットが積極的に処理可能な受信パケット数を示します。詳細は Erlang ドキュメント - setopts/2 を参照してください。 - バッファ: 受信および送信パケットを格納するバッファのサイズを KB 単位で設定します。
- TCP_NODELAY: 接続に対して
TCP_NODELAYフラグを有効にするか設定します。これはクライアントが前のデータのアックを待たずに追加データを送信できるかどうかを制御します。デフォルトは false、選択肢は true または false。 - SO_REUSEADDR: ローカルポート番号の再利用を許可するか設定します。
- 送信タイムアウト: 非アクティブ状態で送信タイムアウトが発生するまでの最大待機時間(秒)を設定し、タイムアウト時に接続を切断します。デフォルトは 15秒。
- 送信タイムアウト時の接続切断: 送信タイムアウト時に接続を切断するかどうかを設定します。
SSL 設定(SSL リスナーのみ)
TLS 検証を有効にするかどうかはトグルスイッチで設定可能です。ただし、その前に関連する TLS 証明書、TLS キー、および CA 証明書 の情報をファイル内容の入力または ファイル選択 ボタンでアップロードして設定する必要があります。詳細は SSL/TLS 接続の有効化 を参照してください。
続けて以下の設定が可能です。
- SSL バージョン: サポートする SSL バージョンを設定します。デフォルトは tlsv1.3、tlsv1.2、tlsv1.1、tlsv1。
- ピア証明書なしで失敗: クライアントが空の証明書を送信した場合に EMQX が接続を拒否するか設定します。デフォルトは false、選択肢は true または false。
- 中間証明書の深さ: ピア証明書に続く有効な認証パスに含まれる自己発行でない中間証明書の最大数を設定します。デフォルトは 10。
- キーのパスワード: プライベートキーがパスワード保護されている場合に使用するパスワードを設定します。
認証の設定
STOMP プロトコルの接続メッセージにはユーザー名とパスワードの概念が既に定義されているため、STOMP は以下のような多様な認証方式をサポートしています。
STOMP ゲートウェイは STOMP プロトコルの CONNECT または STOMP メッセージの情報を用いてクライアントの認証情報を生成します。
- クライアント ID: ランダム生成された文字列
- ユーザー名:
CONNECTまたはSTOMPメッセージヘッダーのloginフィールドの値 - パスワード:
CONNECTまたはSTOMPメッセージヘッダーのpasscodeフィールドの値
REST API を使って STOMP ゲートウェイ用の組み込みデータベース認証を作成することも可能です。
例:
curl -X 'POST' \
'http://127.0.0.1:18083/api/v5/gateway/stomp/authentication' \
-u <your-application-key>:<your-security-key> \
-H 'accept: application/json' \
-H 'Content-Type: application/json' \
-d '{
"backend": "built_in_database",
"mechanism": "password_based",
"password_hash_algorithm": {
"name": "sha256",
"salt_position": "suffix"
},
"user_id_type": "username"
}'TIP
MQTT プロトコルとは異なり、ゲートウェイは認証方式の作成のみをサポートし、認証方式のリスト(または認証チェーン)はサポートしていません。
認証方式が有効化されていない場合、すべての STOMP クライアントのログインが許可されます。