Spring websocket Spring WebSocket ConvertAndSendToUser不工作,但convertAndSend工作
我不熟悉Spring boot websocket和消息传递语义。目前,我可以使用以下代码发送私人消息Spring websocket Spring WebSocket ConvertAndSendToUser不工作,但convertAndSend工作,spring-websocket,stomp,Spring Websocket,Stomp,我不熟悉Spring boot websocket和消息传递语义。目前,我可以使用以下代码发送私人消息 String queueName = "/user/" + username + "/queue/wishes"; simpMessagingTemplate.convertAndSend(queueName, message); 当尝试使用convertAndSendToUser时,我没有收到任何错误,但是消息没有被发送。我知道,使用sendToUser时,应该对目的地名称的形成方式做一
String queueName = "/user/" + username + "/queue/wishes";
simpMessagingTemplate.convertAndSend(queueName, message);
当尝试使用convertAndSendToUser时,我没有收到任何错误,但是消息没有被发送。我知道,使用sendToUser时,应该对目的地名称的形成方式做一些细微的更改,但我没有弄清楚
String queueName = "/user/queue/wishes";
simpMessagingTemplate.convertAndSendToUser(username, queueName, message);
下面是我的订阅代码
stompClient.subscribe('/user/queue/wishes', function(message) {
alert(message);
})
由于您的“目的地”即“队列名称”不正确,因此无法发送。 如您所见,这是在调用
template.convertAndSendToUser()
时作为链的一部分调用的方法
此方法已将/user
作为最终目标的前缀。因此,你应该这样做:
SimpMessageTemplate.convertAndSendToUser(用户名,“/queue/wishes”,消息)代码>
现在有了正确的目的地,它应该被发送给用户 我有一个类似的问题,如果您的用户名
实际上是一个sessionId
,那么请尝试使用一个重载的方法来接受标题(在javadoc中是这样说的):
终于解决了问题。我犯了一个愚蠢的错误。我是作为WebSocket配置的一部分填充用户DestinationPrefix的。但是没有为注入的bean SimpMessage模板设置它。没有。它仍然不工作。最初,我将“/user”添加到目的地,但它不适用于“/queue/wisks”目的地。
SimpMessageHeaderAccessor headerAccessor = SimpMessageHeaderAccessor.create(SimpMessageType.MESSAGE);
headerAccessor.setSessionId(username);
headerAccessor.setLeaveMutable(true);
messagingTemplate.convertAndSendToUser(username, "/queue/wishes", message, headerAccessor.getMessageHeaders());