【发布时间】:2019-09-09 15:54:42
【问题描述】:
当我使用@SendToUser 注释发送消息时,就完成了。我在客户端收到消息。
但是当我使用 msgTempl.convertAndSendToUser(...) 发送消息时,我无法在客户端获得响应。
按照我的代码:
@RestController
public class NotifyController {
private final SimpMessagingTemplate messagingTemplate;
@Autowired
public NotifyController(SimpMessagingTemplate messagingTemplate) {
this.messagingTemplate = messagingTemplate;
}
@MessageMapping("/chat.send")
/* @SendToUser("/queue/ns-queue")*/
public Message sendMessage(@Payload Message message,
@Header("simpSessionId") String sessionId) {
messagingTemplate.convertAndSendToUser(sessionId, "/queue/ns-queue",
message);
return message;
}
@MessageMapping("/chat.register")/*
@SendToUser("/queue/ns-queue")*/
public Message addUser(@Payload Message message,
SimpMessageHeaderAccessor headerAccessor,
@Header("simpSessionId") String sessionId) {
messagingTemplate.convertAndSendToUser(sessionId, "/queue/ns-queue",
message);
return message;
}
}
WsConfig:
@Configuration
@EnableWebSocketMessageBroker
public class WebSocketConfiguration implements
WebSocketMessageBrokerConfigurer {
private final WebSocketConfigurationProperties configurationProperties;
@Autowired
public WebSocketConfiguration(WebSocketConfigurationProperties
configurationProperties) {
this.configurationProperties = configurationProperties;
}
@Override
public void configureMessageBroker(MessageBrokerRegistry config) {
config.enableSimpleBroker(configurationProperties.getTopic());
config.
setApplicationDestinationPrefixes(configurationProperties.getAppPrefix());
}
@Override
public void registerStompEndpoints(StompEndpointRegistry registry) {
registry.addEndpoint(configurationProperties.getEndpoint()).withSockJS();
}
}
在客户端:
function connect(event) {
username = document.querySelector('#name').value.trim();
if(username) {
usernamePage.classList.add('hidden');
chatPage.classList.remove('hidden');
var socket = new SockJS('/ns/ws/endpoint');
stompClient = Stomp.over(socket);
stompClient.connect({}, onConnected, onError);
}
event.preventDefault();
}
function onConnected(payload) {
// Subscribe to the Public Topic
stompClient.subscribe('/user/queue/ns-queue', onMessageReceived);
// Tell your username to the server
stompClient.send("/ns/ws/chat.register",
{},
JSON.stringify({sender: username, type: 'JOIN'})
)
connectingElement.classList.add('hidden');
}
我不使用弹簧安全。
请帮帮我!为什么我在使用 SimpMessagingTemplate 时无法发送和接收消息?
【问题讨论】:
标签: java spring websocket sockjs