Вопрос: Разница между / topic, / queue для SimpleMessageBroker в Spring Websocket + SockJS


Есть ли пояснения, каковы различия между / topic, / queue и т. Д. Для Spring Websocket + SockJS на случай, если я использую «простой брокер»? Например. Вот Отправка сообщения конкретному пользователю в Spring Websocket  говорят: когда ваш клиент подписался на канал, начинающийся с / user /, например: / user / queue / reply, ваш экземпляр сервера будет подписаться на очередь с именем queue / reply-user [session id]  

Я хотел бы понять логику таких преобразований определенным образом.


7


источник


Ответы:


Вы должны взглянуть на эта часть справочной документации , В двух словах, "/topic" а также "/queue" оба префикса настроены для одного и того же адресата.

В документации, "/app" является настроенным «префиксом назначения приложения» - это означает, что все сообщения, проходящие через "clientInboundChannel" и сопоставление этих префиксов будет сопоставлено с вашим приложением, например @MessageMapping аннотаций.

Здесь также, "/topic" а также "/queue" оба префикса, настроенные как адресаты STOMP, то есть все сообщения, проходящие через "clientInboundChannel" и сопоставление этих префиксов будет отправлено брокеру STOMP. В вашем случае это простая реализация брокера.

Таким образом, с точки зрения Spring Websocket, "/queue" а также "/topic" обрабатываются одинаково и являются «типичными» назначениями STOMP - все сообщения, соответствующие этим, пересылаются брокеру сообщений. Теперь, если вы используете полную реализацию брокера сообщений, эти адресаты могут не иметь того же значения, и поведение брокера сообщений может отличаться. Вот несколько примеров с Apache Apollo  а также RabbitMQ ,

Обратите внимание: если вы захотите, вы можете изменить эти префиксы. Но я бы посоветовал держать их в качестве дефолтов, если вы действительно не знаете, что делаете.


9



Я думаю, что лучшим ответом для этой темы было бы следующее из Spring Docs

Значение пункта назначения намеренно оставлено непрозрачным в STOMP   спекуляция Это может быть любая строка , и это полностью зависит от серверов STOMP.   определить семантику и синтаксис адресатов, которые они   поддержка. Однако очень важно, чтобы адресаты были похожи на пути   строки, где "/ topic / .." подразумевает публикацию-подписку (один-ко-многим) и   «/ queue /» подразумевает обмен сообщениями «точка-точка» (один-к-одному).


1