WebSocketを使用してRabbitMQに接続
9336 ワード
関連記事RabbitMQインストール構成とSpring統合https://blog.csdn.net/isea533/article/details/84545484RabbitMQはHTTPバックグラウンド認証を有効にするhttps://blog.csdn.net/isea533/article/details/85096253
WebSocketを使用してRabbitMQに接続するにはアイデンティティ認証が必要であり、デフォルト認証方式のアカウントパスワードは固定されているため、この方式を使用すると、フロントエンドJSコードのユーザーパスワードを介してRabbitMQサーバに接続することができ、どのような権限で制限しても安全ではありません.
そのため、WebSocketを安全に使用するためには、前のRabbitMQに合わせてHTTPバックグラウンド認証を有効にする必要があります.カスタマイズされたバックグラウンド認証を使用すると、使用できるユーザーはRabbitMQ内蔵方式で作成されたユーザーに限られません.
本明細書では、ユーザがシステムにログインした後、RabbitMQに接続するユーザ名としてユーザのTOKENまたはSESSIONIDを使用し、パスワードが直接空であると仮定する.ユーザーの特定の情報から一時的なメッセージキューを作成します(フロントサブスクリプションのキューと一致する必要があります).
バックグラウンドHTTPでは、TOKENまたはSESSIONIDをインタフェースまたはRedisの統一認証方式で認証し、すべての認証インタフェースでもユーザ名を認証し、登録を保持しているユーザのみがRabbitMQサービスに接続する権利がある.
Web STOMPプラグインの有効化
次のコマンドでWeb STOPMプラグインを有効にします.
参照先:https://www.rabbitmq.com/web-stomp.html
この時点でwebsocketで接続できるようになりましたが、stomp-websocketが推奨されています.
以下、フロントエンドJSコードを作成する
JS WebSocket接続
stomp-websocketが提供するstompを導入する.jsファイル.
サンプルコードは次のとおりです.
バックグラウンドでは、TOKENなどのカスタム方式の認証を自分で実現する必要があります.
たとえば、メッセージを送信するには、次のようにします.
たとえば、スイッチを購読するには、次のようにします.
また、指定したキュー名を次のように作成することもできます(この例では永続化も追加します).
キューに他のルーティングキーをバインドし続けることもできます.
このときキューliuzhのステータスは、です.
バインドは次のとおりです:
ここで使用するパラメータに加えて、次のキューパラメータもサポートされています. durable(aliased as persistent):持続化 auto-delete:自動削除 exclusive:独占 さらに、xパラメータ制御のデッドメッセージ、キュー、メッセージなどをサポートします. x-dead-letter-exchange x-dead-letter-routing-key x-expires x-message-ttl x-max-length x-max-length-bytes x-overflow x-max-priority
ここではいくつかの重要な例を挙げただけで、完全な構文はSTOMP Pluginページの詳細な説明を表示することができます.
参考資料 https://www.rabbitmq.com/stomp.html https://www.rabbitmq.com/web-stomp.html https://github.com/jmesnil/stomp-websocket/
WebSocketを使用してRabbitMQに接続するにはアイデンティティ認証が必要であり、デフォルト認証方式のアカウントパスワードは固定されているため、この方式を使用すると、フロントエンドJSコードのユーザーパスワードを介してRabbitMQサーバに接続することができ、どのような権限で制限しても安全ではありません.
そのため、WebSocketを安全に使用するためには、前のRabbitMQに合わせてHTTPバックグラウンド認証を有効にする必要があります.カスタマイズされたバックグラウンド認証を使用すると、使用できるユーザーはRabbitMQ内蔵方式で作成されたユーザーに限られません.
本明細書では、ユーザがシステムにログインした後、RabbitMQに接続するユーザ名としてユーザのTOKENまたはSESSIONIDを使用し、パスワードが直接空であると仮定する.ユーザーの特定の情報から一時的なメッセージキューを作成します(フロントサブスクリプションのキューと一致する必要があります).
バックグラウンドHTTPでは、TOKENまたはSESSIONIDをインタフェースまたはRedisの統一認証方式で認証し、すべての認証インタフェースでもユーザ名を認証し、登録を保持しているユーザのみがRabbitMQサービスに接続する権利がある.
Web STOMPプラグインの有効化
次のコマンドでWeb STOPMプラグインを有効にします.
rabbitmq-plugins enable rabbitmq_web_stomp
参照先:https://www.rabbitmq.com/web-stomp.html
この時点でwebsocketで接続できるようになりましたが、stomp-websocketが推奨されています.
以下、フロントエンドJSコードを作成する
JS WebSocket接続
stomp-websocketが提供するstompを導入する.jsファイル.
<script src="stomp.js">script>
サンプルコードは次のとおりです.
var ws = new WebSocket('ws://127.0.0.1:15674/ws');
var client = Stomp.over(ws);
var on_connect = function() {
console.log('connected');
};
var on_error = function() {
console.log('error');
};
// : , , , ,
client.connect(' TOKEN', '', on_connect, on_error, '/');
on_connect
接続成功では、独自の論理を定義してカプセル化することができる.バックグラウンドでは、TOKENなどのカスタム方式の認証を自分で実現する必要があります.
たとえば、メッセージを送信するには、次のようにします.
// : , ,
client.send('/exchange/ / ', {}, "Hello");
たとえば、スイッチを購読するには、次のようにします.
// : , ,
client.subscribe('/exchange/ / ', function(frame){}, {});
stomp-subscription-*****
のキュー名のようなランダムに生成された非永続化されたキューが自動的に作成されます.また、指定したキュー名を次のように作成することもできます(この例では永続化も追加します).
// : , ,
client.subscribe('/exchange/wf/wf.warn', function(frame){}, {
'x-queue-name': 'liuzh',
'durable': true
});
キューに他のルーティングキーをバインドし続けることもできます.
// : , ,
client.subscribe('/exchange/wf/wf.error', function(frame){}, {
'x-queue-name': 'liuzh',
'durable': true
});
このときキューliuzhのステータスは、です.
バインドは次のとおりです:
ここで使用するパラメータに加えて、次のキューパラメータもサポートされています.
ここではいくつかの重要な例を挙げただけで、完全な構文はSTOMP Pluginページの詳細な説明を表示することができます.
参考資料