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プラグインを有効にします.
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のステータスは、在这里插入图片描述です.
バインドは次のとおりです:使用 WebSocket 连接 RabbitMQ_第1张图片
ここで使用するパラメータに加えて、次のキューパラメータもサポートされています.
  • 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/