У меня есть, что я думаю, очень простое приложение Spring WebSocket. Тем не менее, я пытаюсь использовать переменные пути для подписки, а также отображение сообщений.Переменные пути в Spring WebSockets @SendTo mapping
Я разместил приведенный ниже пример. Я бы ожидал, что аннотация @SendTo
вернется к подписчикам на основе их fleetId
. то есть POST
- /fleet/MyFleet/driver/MyDriver
должен уведомить об этом подписчиков /fleet/MyFleet
, но я не вижу такого поведения.
Стоит отметить, что подписка на литерал /fleet/{fleetId}
работает. Это предназначено? Не хватает ли какой-то части конфигурации? Или это не так, как это работает?
Я еще не знаком с WebSockets или этим проектом Spring, поэтому заранее заблаговременно.
Controller.java
...
@MessageMapping("/fleet/{fleetId}/driver/{driverId}")
@SendTo("/topic/fleet/{fleetId}")
public Simple simple(@DestinationVariable String fleetId, @DestinationVariable String driverId) {
return new Simple(fleetId, driverId);
}
...
WebSocketConfig.java
@Configuration
@EnableWebSocketMessageBroker
public class WebSocketConfig extends AbstractWebSocketMessageBrokerConfigurer {
@Override
public void configureMessageBroker(MessageBrokerRegistry config) {
config.enableSimpleBroker("/topic");
config.setApplicationDestinationPrefixes("/live");
}
@Override
public void registerStompEndpoints(StompEndpointRegistry registry) {
registry.addEndpoint("/fleet").withSockJS();
}
}
index.html
var socket = new SockJS('/fleet');
var stompClient = Stomp.over(socket);
stompClient.connect({}, function(frame) {
// Doesn't Work
stompClient.subscribe('/topic/fleet/MyFleet', function(greeting) {
// Works
stompClient.subscribe('/topic/fleet/{fleetId}', function(greeting) {
// Do some stuff
});
});
Отправить Sample
stompClient.send("/live/fleet/MyFleet/driver/MyDriver", {}, JSON.stringify({
// Some simple content
}));
Спасибо, @sergi! Я надеялся обойтись с помощью MessagingTempalte, но это работает так же хорошо. В чем разница между использованием '@ SubscribeMapping' и' @ SendTo'? Бывшие просто пропускают брокера сообщений? – bvulaj
'@ SubscribeMapping' перехватывает только подписки (а не сообщения на канал), возвращаемое значение будет отправлено непосредственно пользователю, но может быть отменено с помощью' @ SendTo', чтобы отправить его в другой пункт назначения (будет отправлен брокерскому каналу). '@ SendTo' также может использоваться с' @ MessageMapping' для отправки ответа на конкретный пункт назначения.Таким образом, в основном, '@ SendTo' может использоваться вместе с' @ MessageMapping' и '@ SubscribeMapping' –
. Я должен выполнять одинаковый проект равным, но не могу запускаться, то же, что может использовать прототип проекта, например, в github. Я знаю работу Spring, но не работает WebSocket, мне нужно отправить сообщение два человека, и сообщение такое же, как Skype. один к одному, дерево, если приглашают больше одного пользователя. –