1

このモジュールを使用して、node-amqprabbitmq サブスクリプションを管理しています。具体的には、各ユーザー/セッションに排他的/プライベート キューを割り当て、REST インターフェイスを介してバインディング メソッドを提供しています。つまり、「キューをこの exchange/routing_key ペアにバインド」し、「キューをこの exchange/routing_key ペアにバインド解除」します。

ここでの課題は、キュー オブジェクトへの参照をメモリ内 (たとえば、モジュール全体のスコープを持つオブジェクト内) に保持しないようにすることです。

必要なたびに接続からキュー自体を取得するだけでは難しいことがわかりました。これは、おそらくamqp 0.9.1 リファレンスからの次の違反を避けるために、キュー オブジェクトがバインディングのタブを内部で保持しているためです。

クライアントは、存在しないキューのバインドを解除しようとしてはなりません。エラーコード: 見つかりません

プロパティでJSON.stringify/JSON.parseを使用するため、connect-mongoを使用して、キューオブジェクトをセッションオブジェクトのプロパティとして単純に設定しようとしました。残念ながら、循環構造のため、キュー オブジェクトは「文字列化」できません。

node-amqp モジュールからキュー オブジェクトを永続化するためのベスト プラクティスは何ですか? シリアライズ/デシリアライズは可能ですか?

4

1 に答える 1

0

保存できるキューに一意の名前を使用する代わりに、キュー オブジェクトを保存しようとはしません。その後、キューに対して操作を行う場合はいつでも、次の 2 つのオプションがあります。

  • 以前にキューへの「チャネル」を開いている場合は、次のことができるはずです。

    queue = connection.queues[name]. 
    

    rabbitMQ に対する node-amqp 接続としての接続を意味します。

  • rabbitmq との接続でチャネルを開いていない場合は、チャネルを再度開きます。

    connection.queue(name = queueName, options, function(queue) {
        // for example do unbind
    })
    

また、rabbitMQ を管理するために REST インターフェイスを使用しています。私の接続オブジェクトは、すべてのキュー、チャネルなどを維持します...したがって、最初に接続.queueを呼び出すキューを使用しようとすると、次のリクエストはconnection.queuesを介してキューを取得します.

于 2014-03-10T06:33:26.647 に答える