2016-06-15 7 views
0

私はそれが間違っているかもしれないことを実感しますが、ここで私を修正するチャンスがあります!RabbitMqバインディング

Iは、デバイスを持っている - と言う... 60. 装置60はIデバイスからメッセージを受信し、メッセージヘッダ内のIDであるマスター2

によって処理されるのIDを持ちます。しかし、この段階で私のプログラムは、デバイスが割り当てられているマスターを知りません。

デバイス60のすべてのメッセージを、「Device60」というRabbitMqキューに入れたいと思っています。この時点では、何もそのキューをリッスンしていない可能性があります。だから私は何も聞いていないならば、メッセージはちょうど落とされるだろう、私は交換b/cを使用しない理由です。メッセージが処理されるまでQueue60にとどまるようにメッセージが必要です。

マスター2がオンラインになると、そのデバイスが処理する600個のデバイスのリストが表示されます。だから、その時点でバインディングを作成することができます。

「Device60」のメッセージを「Master2」キューに配信するために、キューからキューへのバインディングを実行するにはどうすればよいですか。

私は、これがすべて間違っ

要件は、任意のデバイスがメッセージ(複数可)に送信することができますし、彼らが、保存されている私はAMQPのRabbitMQの実装に基づいて「正しい」方法を理解する助けてください近づいていた場合

答えて

1

Exchangeを作成し、交換にバインドされたDevice60というキューを使用して、ルーティングキーを使用することができます。

channel.queueBind("Device60","myexchange","device.60") 

この時点で、ルーティングキーを使用してメッセージを公開できます。たとえば :

channel.basicPublish("myexchange","device.60",mymessage); 

Device60がメッセージを受信し、消費者がオンラインになるまで、それらを格納します。他のデバイスについては

それは同じです:

channel.queueBind("Device50","myexchange","device.50") 

channel.basicPublish("myexchange","device.50",mymessage); 

私はそれが役に立てば幸い。

+0

ありがとうございます。私の消費者はオンラインになり、「Master.2」というキューを確立します - どのようにそれが責任あるデバイスのメッセージを受け取ることができますか?申し訳ありませんが私は私の質問で明確だった。つまり、device60の交換をMaster.2のキューにバインドしますが、Device60のキューにある既存のメッセージはどうなりますか? – Wjdavis5

+0

別のキューを作成し、ルーティングキー#を使用してバインドすることができます。 'channel.queueBind(" Master.2 "、" myexchange "、" device。# ")'のように指定します。私はあなたのポイントを持っていることを願って:)! – Gabriele

+0

それは既存のすべてのメッセージをルーティングしますか?私の理解は、それが新しいメッセージを送るだけだったということでした。 – Wjdavis5