2016-06-16 3 views
5

「Simple broker」を使用している場合のSpring Websocket + SockJSの/ topic、/ queueなどとの違いは何ですか?例えば。ここではSending message to specific user on Spring Websocketと書かれています/user /と入力すると、/ user/queue/replyのようにクライアントがキュー/ reply-user [session id]というキューにサブスクライブします。Spring Websocket + SockJSのSimpleMessageBrokerの/ topic、/ queueの相違点

このような変換の背後にある論理を明確に理解したいと思います。

答えて

7

this part of the reference documentationをご覧ください。 一言で言えば、"/topic""/queue"は両方とも同じ宛先に設定されています。すべてのメッセージ"clientInboundChannel"から流入し、それらのプレフィックスに一致することを意味@MessageMapping注釈付き例えば、アプリケーションにマップされます - ドキュメントで

"/app"が設定され、「アプリケーションの宛先プレフィックスが」あります。すべてのメッセージ"clientInboundChannel"から流入し、それらのプレフィックスに一致することを意味STOMPブローカーに転送されます - ここで

も、"/topic""/queue"はSTOMP先として設定され、両方の接頭辞です。あなたの場合、それは単純なブローカーの実装です。

したがって、Spring Websocketの観点からは、"/queue""/topic"は同じ方法で扱われ、「典型的な」STOMP宛先です。それらに一致するすべてのメッセージはメッセージブローカに転送されます。現在、完全なメッセージブローカー実装を使用している場合、それらの宛先は同じ意味を持たず、メッセージブローカーの動作が異なる可能性があります。以下は、Apache ApolloRabbitMQの例です。

必要に応じて、これらのプレフィックスを変更できます。しかし、あなたが何をしているのか本当に分かっていない限り、それらをデフォルトにしておくことをお勧めします。

+1

実際には/ topicと/ queueの違いは何ですか?私はそれらのどちらかを使うべきか、あるいは自分のものを作り上げることができるのか、今は明らかではありません。 –

+1

私は自分の答えを更新しました。単純なメッセージブローカーの場合、それはまったく違いはありません。しかし、実際のメッセージブローカー(アプリケーションの複数のインスタンスを展開する必要がある場合)を使用すると、それらの宛先には異なる意味がある可能性があることを明確にしました。 –

関連する問題